0

我想在元素属性中转义“>”和“<”,不幸的是我无法弄清楚。看起来默认情况下,在 IE outerHTML 中转义 & 字符,一旦我尝试转义“>”(将“>”替换为“amp+gt;”),作为“amp+gt;”一部分的 & 符号 再次逃脱。这是一个示例代码:

        var div = '<div atr="test & and < and >"></div>';            
        var $el = $(div);
        console.log("txt string: " + div);
        console.log("$el outerHTML BEFORE escaping: " + $el[0].outerHTML);

        var rgx = new RegExp(">", "g");
        $el.attr("atr", $el.attr("atr").replace(rgx, "&gt;"));
        console.log("$el outerHTML AFTER escaping: " + $el[0].outerHTML);

这是此代码的输出:

txt string: <div atr="test & and < and >"></div>
$el outerHTML BEFORE escaping: <div atr="test &amp; and < and >"></div>
$el outerHTML AFTER escaping: <div atr="test &amp; and < and &amp;gt;"></div>

正如人们所看到的那样,作为更大的一部分的&符号然后被转义再次被转义。基本上我需要的是:

<div atr="test &amp; and < and &gt;"></div>

请让我知道这里可能缺少什么以及如何解决这个问题?

谢谢你。

4

1 回答 1

1

只需使用该.attr方法设置属性,内容将自动转义:

> $('<div>').attr('foo', '<>')[0].outerHTML
"<div foo="&lt;&gt;"></div>"

注意:这是使用 jQuery 方法来修改元素而不是字符串连接的好处之一。

于 2013-10-16T19:50:25.980 回答