1

我试图了解 html 编码和解码如何在浏览器和 jQuery 中工作。我知道该$('<div/>').text(myString)函数会将任何 < 和 > 以及其他一些字符编码为相应的 html 实体。因此

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

但是如果我再次调用 text() 会怎样,如下所示:

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

这似乎再次解码了字符串,与此相反:

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

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

4

1 回答 1

2

使用 jQuery 检索元素或节点的文本在 jQuery 内部.text()使用 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。

于 2012-08-02T23:40:54.397 回答