我创建了一个突出显示代码的指令,但似乎浏览器正在修改该代码,然后才能进行突出显示。
这里发生了什么。
我有一个名为my-compile
的指令,基本上只是将传递的值吐出到元素的innerHTML中并在其上运行$compile
。
例如:
<span my-compile="details"></span>
详细信息如下:
here are some details and here's a <code lang="java">first = temp & 0xFF &</code>
这里有重要的指令代码(这是在链接功能中):
element.html(details); $compile(element.children())(scope);
因此$compile
会看到<code>
指令并将其交给代码指令,除了问题,<code>
指令执行element.html()
获取内容并返回:
first = temp & 0xFF &
问题是代码现在是错误的,因为第一个&amp;没有逃过一劫。
我怎样才能以类似的方式使用<code>
指令,但保留&amp;标志(我假设这发生在&gt;和&lt; sign)?
我唯一的想法是查找服务,但这有点凌乱,但也许是我唯一的选择,因为它击中了浏览器的DOM,它被逃脱了,但逃脱的&amp;没有双重逃脱。
我也尝试使用element[0].innerHTML
思考它可能是一个Angular / jQuery清理工具,但它不是。
答案 0 :(得分:0)
问题在于,当您第一次将{h}添加到DOM时,element.html(details);
浏览器将其解析为html(顺便说一句 - 它修复了错误的转义,添加了丢失的关闭标记等),以及当您尝试访问它时稍后 - 您将获得在解析期间完成所有修复的HTML。
如何修复它的唯一方法 - 将您的代码内容正确编码为文本实体(如果您需要文本first = temp & 0xFF &
编码版本,则提供示例将为first = temp & 0xFF &amp;
),访问它为{ {1}}但不是element.text()
指令中的element.html()
。