逃脱“<”和“>”作为IE中元素属性值的一部分

时间:2013-10-16 19:40:52

标签: javascript escaping

我想逃避“>”和“<”在一个元素属性内,不幸的是我无法弄明白。 看来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>

请您告诉我这里可能缺少什么以及如何解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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