【发布时间】:2011-12-17 13:02:30
【问题描述】:
我正在尝试编写一个例程来比较 $(element).text() 和 $(element).html() 输出以确定 html 标记的位置。这将在稍后用于将“strong”和“em”等格式化标签应用于内容可编辑项,而无需借助 document.execCommand()。
此时我意识到,要进行比较,需要将 $(element).text() 输出中的 '>'、'
我的问题是:
是否有一组基本字符(我的猜测是 >、
jQuery 的 .html() 方法是否尊重这组字符,或者 jQuery 是否在做自己的事情来平衡浏览器之间的差异。如果是这样,我在哪里可以找到 jQuery 转换为实体的基本字符的完整列表?
进一步说明:
如果在 contenteditable 上我有一个手动输入此文本的段落:
some text, and some characters >, <, ", &, ', ë
$('p').text() 会给我:
some text, and some characters >, <, ", &, ', ë
$('p').html() 会给我:
some text, and some characters >, <, ", &, ', ë
这也是我在 firebug 和 chrome 开发者工具中看到的结果。
和 & 显然对于整个工作来说是必不可少的,而引号和特殊字符则不是。
我想通过 find/replace all 转换$('p').text() 的结果,以匹配$('p').html() 的输出,减去标签本身。
我需要知道除了明显的和&之外还有哪些字符需要转换为html实体才能完美匹配。
这是干什么用的:
我正在尝试使用可内容编辑的 div 构建一个简单的 WYSIWYM 编辑器,而不使用现有的 WYMEditor 和它附带的 iFrame。
这将在受控环境(我的自定义 cms)中使用,并将允许 html 编辑器中预期的功能子集。基本上整个事情就是一堆 P、H1-H6 和 UL>LI、OL>LI 标签,它们位于一个内容可编辑的 div 中。
内容标签(没有 UL 或 OL 子级的 P、H1-H6 和 LI 标签)将只允许包含 STRONG、EM、A、SUB、SUP 和 SPAN 标签。
我的目标不是 IE,但希望在没有平台差异的情况下在 FF 和 Chrome 中工作。这些平台差异之一是在粗体或斜体文本时执行 document.execCommand() 的方式。 FF 包装选择,而 chrome 使用标签。我决定使用以下方式来应用格式:
- 获取选择范围。
- 列出范围内的所有“内容标签”。
- 使用范围对象,以及它与每个“内容标签”的关系,我定义了三个文本块:选择前、选择和选择后。这些以纯文本形式出现,特殊字符未转换为实体。
- 对于每个“内容标签”innerhtml,我逐个字符地解析以分解成每种标签的“地图”。我已经建立了标签的层次结构:a > span > sub|sup > strong > em。 “地图”将是这样的:
innerhtml:this <em>is <strong>a</strong></em> <a href="#"><strong>test</strong>文本
text: this is a test text
a: __________XXXXXXXXX
strong: ________X_XXXX_____
em: _____XXXX__________
- 使用之前的选择、选择和选择后的文本,以及格式化操作,然后我创建了一个蒙版。例如,如果“this is”需要加粗:掩码为:
text: this is a test text strong: XXXXXXX____________
- 将蒙版与贴图结合后,得到的贴图为:
text: this is a test text a: __________XXXXXXXXX strong: XXXXXXX_X_XXXX_____ em: _____XXXX__________
- 此地图被转换为 html:
<strong>this <em>is</em></strong><em> </em><strong><em>a</em></strong> <a href="#"><strong>test</strong>
- 用生成的 html 替换“容器标签”的 innerhtml。
现在我问这个问题的原因是我需要从 html 中提取的文本块和范围给我的文本以完美匹配。所以我不能转换任何特殊字符,只能转换“基本”字符。
我知道这可能不是解决这个问题的最简单或最快的方法,但我是一个视觉思考者,并且以某种方式将问题放在二维网格中非常有帮助。
【问题讨论】:
标签: javascript jquery html