4

Jquery で予期しない動作が見られます。jqueryが"リテラルの二重引用符に変換しているように見えます. コンテンツは jquery を介して設定され、その時点で、含まれているフォーム フィールドが"変換され"、フォームが壊れます。

テストとして、通常の JS dom 操作を試してみましたが、異なる結果が得られました。これは、Jquery の 1.x および 2.x バージョンで一貫しているようです。

これが私が試したコードです:

// Regular Javascript
var e = document.createElement('div');
var textNode=document.createTextNode('&');
e.appendChild(textNode)
console.log(e.childNodes) //=> ['&']

var e = document.createElement('div');
var textNode=document.createTextNode('"');
e.appendChild(textNode)
console.log(e.childNodes) //=> ['"']

// vs. Jquery

e = $('<div>')
content = '&amp;'
e.html(content)
console.log(e.html()) //=> &amp;

e = $('<div>')
content = '&quot;'
e.html(content)
console.log(e.html()) // => " (a quote)

何かご意見は?

Jquery doc を編集 すると、.html() はブラウザーの innerHTML 実装に基づいていると書かれています。ただし、上記の純粋な JS コードを使用すると: console.log(e.innerHTML) yeilds: & と " それぞれ。

さらに、jquery yeilds に格納されている実際の dom で innerHTML を呼び出します:それぞれ console.log(e.get(0).innerHTML) & と "。

e = $('<div />');
content = '&quot;'
e.html(content)
console.log(e.get(0).innerHTML) // => "
console.log(e.html()) // => "
console.log(e.text()) // => "

e = $('<div />');
content = '&amp;'
e.html(content)
console.log(e.get(0).innerHTML) //=> &amp;
console.log(e.html()) //=> &amp;
console.log(e.text()) //=> &
4

3 に答える 3

4

$.html()メソッドは、HTML エンティティをデコード/エンコードします。この動作を回避するには、代わりに$.text()を使用することを検討してください。

var e = $("<div>"), content = "&quot;";
e.text(content);
console.log(e.text()); // outputs &quot;

編集

正規表現の置換を使用して問題のある引用符を見つけ、次のように自分でエンコードすることを検討してください。

var e = $("<div>"), content = "&quot;&amp;";
e.html(content);
console.log(e.html()); // outputs "&amp;

var e_encoded = e.html().replace(/"/g, "&quot;");
console.log(e_encoded); // outputs &quot;&amp;

content上記は、変数に含まれるタグ内の HTML 属性に使用される引用符もエンコードすることに$.html()注意してください。

これが役立つことを願っています!

于 2013-06-05T21:31:47.043 に答える
1

ではなく.text()メソッドを使用してください.html()

于 2013-06-05T21:31:35.710 に答える
0

jquery はブラウザーの innerHTML メソッドをラップしているだけなので、これは予想される動作であるというのがコンセンサスです。

これは、レンダリングされたフォーム入力などで " と " を区別する必要がある単一ページ アプリのように思われる悲しいニュースです。

于 2013-06-06T00:37:41.143 に答える