为什么$('<div>')。text(value).text();不能逃避HTML?</div>

时间:2012-08-02 23:09:53

标签: jquery html encoding escaping

我正在尝试理解html编码和解码在浏览器和jQuery中的工作原理。我知道$('<div/>').text(myString)函数将编码任何&lt;和&gt;和其他一些字符到他们适当的html实体。因此

"<a>" =>"&le,a&gt;" 

但是,如果我对text()应用另一个调用,如下所示:

$('<div/>').text(myString).text()

这似乎再次解码字符串,而不是:

$('<div/>').text(myString).html()

为什么?为什么第二次调用text()会破坏html编码?也许我对如何逃避上下文的心理模型是错误的。谢谢。

1 个答案:

答案 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。