Jquery转换&;引用;逐字引用

Jquery转换&;引用;逐字引用,jquery,dom,html-parsing,double-quotes,quote,Jquery,Dom,Html Parsing,Double Quotes,Quote,我在Jquery中看到一些意想不到的行为。似乎jquery正在将“转换为文字双引号,这会干扰我正在使用的单页应用程序中的表单验证。内容是通过jquery设置的,此时包含“的表单字段会转换为”,从而破坏表单 作为测试,我尝试了常规的JSDOM操作,得到了不同的结果。这在Jquery的1.x和2.x版本中似乎是一致的 以下是我尝试的代码: // Regular Javascript var e = document.createElement('div'); var textNode=documen

我在Jquery中看到一些意想不到的行为。似乎jquery正在将
转换为文字双引号,这会干扰我正在使用的单页应用程序中的表单验证。内容是通过jquery设置的,此时包含
的表单字段会转换为
,从而破坏表单

作为测试,我尝试了常规的JSDOM操作,得到了不同的结果。这在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)
//常规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=$('')
内容='&;'
e、 html(内容)
console.log(e.html())/=>&;
e=$('')
内容=“”
e、 html(内容)
console.log(e.html())/=>(一个引号)
有什么想法吗

编辑 Jquery doc表示.html()基于浏览器的innerHTML实现。 但是,使用上面的纯JS代码: log(e.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()) //=> &
此外,在jquery yeilds中存储的实际dom上调用innerHTML: 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()) //=> &
e=$('');
内容=“”
e、 html(内容)
console.log(e.get(0.innerHTML)/=>”
console.log(e.html())/=>“
console.log(e.text())/=>“
e=$('');
内容='&;'
e、 html(内容)
log(e.get(0.innerHTML)//=>&;
console.log(e.html())/=>&;
console.log(e.text())/=>&
< /代码> 使用而不是<代码> .html()>代码> < /p> < p>该方法将对HTML实体进行解码/编码。
var e=$(“”),content=“”;
e、 文本(内容);
console.log(e.text());//产出”
编辑

你可以考虑只使用一个正则表达式替换来查找冒犯的引号并自己编码如下:

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;
var e=$(“”),content=“”&;
e、 html(内容);
console.log(e.html());//输出“&;
var e_encoded=e.html().replace(/“/g,”);
console.log(e_编码);//输出“&;
请记住,上面的代码还将对
content
变量中包含的任何标记中用于HTML属性的任何引号进行编码,这就是
$.HTML()
方法不首先对它们进行编码的原因


我希望这有帮助

一致认为这是预期的行为,因为jquery只是包装浏览器的innerHTML方法


对于需要区分呈现表单输入中的“和”的单页应用程序来说,这似乎是一个令人伤心的消息。

您不应该为此使用jQuery。它在各方面都很优秀。不过,它似乎只在双引号中这样做。回复:;但它似乎只在双引号中这样做。回复:;他独自一人。还有周围的标记,所以我无法使用.text()。这是一个经过提炼的例子。