我在 Jquery 中看到了一些意想不到的行为。看来 jquery 正在转换"
为文字双引号,这与我正在处理的单页应用程序中的表单验证相混淆。内容是通过 jquery 设置的,此时包含的表单字段"
被转换为"
破坏表单。
作为测试,我尝试了常规的 JS dom 操作并得到了不同的结果。这似乎与 Jquery 的 amont 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 = '&'
e.html(content)
console.log(e.html()) //=> &
e = $('<div>')
content = '"'
e.html(content)
console.log(e.html()) // => " (a quote)
有什么想法吗?
编辑 Jquery 文档说 .html() 基于浏览器的 innerHTML 实现。但是,使用上面的纯 JS 代码:console.log(e.innerHTML) yields: & 和“ 分别。
此外,对存储在 jquery 中的实际 dom 调用 innerHTML 分别会产生:console.log(e.get(0).innerHTML) & 和 "。
e = $('<div />');
content = '"'
e.html(content)
console.log(e.get(0).innerHTML) // => "
console.log(e.html()) // => "
console.log(e.text()) // => "
e = $('<div />');
content = '&'
e.html(content)
console.log(e.get(0).innerHTML) //=> &
console.log(e.html()) //=> &
console.log(e.text()) //=> &