jQuery text()方法不适用于textnodes

时间:2015-12-05 09:41:28

标签: jquery textnode

jQuery text()方法不适用于textNodes:

$('div').contents().filter(function(){
  return this.nodeType === 3;
}).text("new text");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>
   textNode text doesn't change
</div>

我的问题是可能是什么原因?

这对于文本空间文本节点难以处理吗?和/或更深层次的后代文本节点而不仅仅是儿童节点?

我不是问如何更改 ,我知道解决方法,但为什么 jq text()方法不支持文字节点?我期望在任何文本节点上使用此方法都能够更改其节点值。

我很确定这是有充分理由的,我不能只是得到它。

1 个答案:

答案 0 :(得分:1)

  

可能是什么原因?

因为那不是text的目的。来自the docs

  

...设置匹配的元素

的文本内容

(我的重点)

为什么它的设计目的不是为John Resig和/或当前的jQuery维护者提供的一个问题,但是在猜测时,让它处理文本节点以及元素会使方法复杂化。如果它是文本节点,则必须检查nodeType并设置nodeValue,或者执行当前的操作(我不知道它们是innerText / {{ 1}}或为元素附加一个文本节点,可能是前者。

大多数jQuery都是以元素为中心的,忽略了其他节点。 textContent是在节点级别工作的极少数方法之一。