【问题标题】:AngularJS Prevent Browser Escaping CharactersAngularJS 防止浏览器转义字符
【发布时间】:2014-06-18 15:12:24
【问题描述】:

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

这就是正在发生的事情。

我有一个名为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 看到&lt;code&gt; 指令并将其交给代码指令,但问题是,&lt;code&gt; 指令执行element.html() 来获取内容并返回:

first = temp &amp; 0xFF &amp;

问题是代码现在是错误的,因为第一个 & 没有被转义。

我怎样才能仍然以类似的方式使用 &lt;code&gt; 指令,但保留 & 符号(我假设这也发生在 > 和

我唯一的想法是查找服务,但这有点乱,但也许我唯一的选择是第二次它到达浏览器的 DOM 时它会被转义,但转义的 & 不会被双重转义。

我也尝试过使用element[0].innerHTML,我认为这可能是 Angular/jQuery 清理的东西,但事实并非如此。

【问题讨论】:

    标签: html angularjs angularjs-directive


    【解决方案1】:

    问题在于,当您第一次将 html 添加到 DOM 时,element.html(details); 浏览器会将其解析为 html(顺便说一句 - 它修复了不正确的转义,添加了缺少的关闭标签等),并且当您稍后尝试访问它时 -您将获得在解析期间完成所有修复的 html。

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

    【讨论】:

    • 我最终只是对所有内容进行了双重编码,因此文字 &amp;amp;amp; 将变为 &amp;amp;amp;,然后通过 .text() 检索进行解码。谢谢您的帮助! :D
    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 2011-12-08
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多