我正在尝试理解html编码和解码在浏览器和jQuery中的工作原理。我知道$('<div/>').text(myString)
函数将编码任何&lt;和&gt;和其他一些字符到他们适当的html实体。因此
"<a>" =>"&le,a>"
但是,如果我对text()应用另一个调用,如下所示:
$('<div/>').text(myString).text()
这似乎再次解码字符串,而不是:
$('<div/>').text(myString).html()
为什么?为什么第二次调用text()会破坏html编码?也许我对如何逃避上下文的心理模型是错误的。谢谢。
答案 0 :(得分:2)
使用jQuery的.text()
检索元素或节点的文本在jQuery内部使用DOM属性.textContent
或.innerText
(取决于浏览器/版本)并返回浏览器返回的内容为了那个原因。
.text()
不应该返回HTML。它应该只返回元素或节点的文本内容。如果存在子节点(例如HTML),则.text()
返回文本节点的串联并省略HTML节点。
如果你调用.text(someText)
并传递一些文本,那么jQuery会这样做:
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
在这里,您可以看到它接受文本并将其作为createTextNode的参数传递,因此文本将直接传递到浏览器以进入单个文本节点而不会被解释为HTML。