我正在尝试编写一个比较$(element).text()和$(element).html()输出的例程来确定html标记的位置。这将在以后用于将格式标记(如“strong”和“em”)应用于contenteditable,而无需使用document.execCommand()。
此时我意识到要进行比较,包括'>','<'和'&'等字符在$(element).text()输出中需要转换为各自的html实体。从firebug我看到这些字符在innerHTML属性中自动转换。我试过其他角色。如引号和变音符号,这些都不会被转换。
我的问题是:
是否有一组重要的字符(我猜是>,<和&)在浏览器中一致转换?我的目标浏览器是Firefox和Chrome,没有IE,谢天谢地。
这个字符集是否受到jQuery的.html()方法的尊重,或者jQuery正在做自己的事情以平衡浏览器之间的差异。如果是这样,我在哪里可以找到jQuery转换为实体的基本字符的完整列表?
进一步澄清:
如果在满足的情况下我有一个手动输入此文本的段落:
some text, and some characters >, <, ", &, ', ë
$('p').text()
会给我:
some text, and some characters >, <, ", &, ', ë
虽然$('p').html()
会给我:
some text, and some characters >, <, ", &, ', ë
这也是我在firebug和chrome开发人员工具中看到的结果。
&lt;,&gt;和&amp;对于整个事情的工作来说显然是必不可少的,而引号和特殊字符则不然。
我想通过find / replace all转换$('p').text()
的结果,以匹配$('p').html()
的输出,减去标记本身。
我需要知道明显的&lt;,&gt;和&amp;旁边的其他字符。需要转换为html实体才能完美匹配。
这是为了什么:
我正在尝试构建一个带有contenteditable div的简单WYSIWYM编辑器,而不需要使用现有的WYMEditor及其附带的iFrame。
这将在受控环境(我的自定义cms)中使用,并允许在html编辑器中预期的功能的子集。基本上整个事情是一堆P,H1-H6和UL&gt; LI,OL&gt; LI标签位于一个可信的div中。
将允许内容标记(P,H1-H6和没有UL或OL子标记的LI标记)仅包含STRONG,EM,A,SUB,SUP和SPAN标记。
我不是针对IE浏览器,但我希望在没有平台差异的情况下在FF和Chrome中使用它。这些平台差异之一是document.execCommand()在粗体化或斜体化文本时的执行方式。当chrome使用标签时,FF会包含选择。我已决定使用以下方式应用格式:
for innerhtml:this <em>is <strong>a</strong></em> <a href="#"><strong>test</strong>
text
text: this is a test text
a: __________XXXXXXXXX
strong: ________X_XXXX_____
em: _____XXXX__________
text: this is a test text strong: XXXXXXX____________
text: this is a test text a: __________XXXXXXXXX strong: XXXXXXX_X_XXXX_____ em: _____XXXX__________
<strong>this <em>is</em></strong><em> </em><strong><em>a</em></strong> <a href="#"><strong>test</strong>
现在我问这个问题的原因是我需要从html中提取的文本块和由范围给出的文本完全匹配。所以我不能转换任何特殊的角色,只能转换为“必要的角色”。
我知道这可能不是解决这个问题的最简单或最快捷的方式,但我是一个视觉思考者,并且以某种方式在二维网格中解决问题会有很大帮助。
答案 0 :(得分:1)
我不清楚你在尝试和问这里。
现在我可以说:是的,<
,>
和&
(如果在引用的属性中使用'
和"
如果写入.html()
/ .innerHTML
,应进行转义。他们在所有情况下都不会需要进行转义,但总是这样做永远不会错。
如果您需要更广泛的答案,则需要更具体(例如使用代码示例)。
编辑:
我仍然不确定我是否理解你想要实现的目标。您是否试图摆脱p
元素中的任何HTML元素(标记)?然后你就可以设置阅读文本并将其设置回来:
$("p").text($("p").text());
或者,如果您只是需要转换任何有问题的字符,您可以使用“unanonymous”元素,将其设置为您希望转换的文本text
并将其读取为.html()
:
alert($("<div>").text("some text, and some characters >, <, \", &, ', ë").html());