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>

ご覧のとおり、great then escaped の一部であるアンパサンドが再びエスケープされます。基本的に私が持っている必要があるのは:

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

ここに何が欠けている可能性があり、これを修正する方法を教えてください。

ありがとうございました。

4

1 に答える 1

1

メソッドを使用し.attrて属性を設定するだけで、コンテンツは自動的にエスケープされます。

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

注: これが、文字列の連結ではなく jQuery メソッドを使用して要素を変更する方がよい理由の 1 つです。

于 2013-10-16T19:50:25.980 に答える