AngularJS防止浏览器转义字符

时间:2014-06-17 23:31:57

标签: html html5 angularjs angularjs-directive

我创建了一个突出显示代码的指令,但似乎浏览器正在修改该代码,然后才能进行突出显示。

这里发生了什么。

我有一个名为my-compile的指令,基本上只是将传递的值吐出到元素的innerHTML中并在其上运行$compile

例如:

<span my-compile="details"></span>

详细信息如下:

here are some details and here's a <code lang="java">first = temp & 0xFF &amp;</code> 

这里有重要的指令代码(这是在链接功能中):

element.html(details); $compile(element.children())(scope);

因此$compile会看到<code>指令并将其交给代码指令,除了问题,<code>指令执行element.html()获取内容并返回:

first = temp &amp; 0xFF &amp;

问题是代码现在是错误的,因为第一个&amp;没有逃过一劫。

我怎样才能以类似的方式使用<code>指令,但保留&amp;标志(我假设这发生在&gt;和&lt; sign)?

我唯一的想法是查找服务,但这有点凌乱,但也许是我唯一的选择,因为它击中了浏览器的DOM,它被逃脱了,但逃脱的&amp;没有双重逃脱。

我也尝试使用element[0].innerHTML思考它可能是一个Angular / jQuery清理工具,但它不是。

1 个答案:

答案 0 :(得分:0)

问题在于,当您第一次将{h}添加到DOM时,element.html(details);浏览器将其解析为html(顺便说一句 - 它修复了错误的转义,添加了丢失的关闭标记等),以及当您尝试访问它时稍后 - 您将获得在解析期间完成所有修复的HTML。

如何修复它的唯一方法 - 将您的代码内容正确编码为文本实体(如果您需要文本first = temp & 0xFF &amp;编码版本,则提供示例将为first = temp &amp; 0xFF &amp;amp;),访问它为{ {1}}但不是element.text()指令中的element.html()