jQuery text() 方法不适用于文本节点

jQuery text() method doesn't work on textnodes

jQuery text() 方法不适用于文本节点:

$('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>

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

关于withespace文本节点,这很难处理吗? And/or 比仅子节点更深层次的后代文本节点?

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

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

what could be the reason for that?

因为这不是 text 设计的目的。来自 the docs:

...set the text contents of the matched elements

(我的重点)

为什么 它不是设计用来这样做的,这是 John Resig and/or 当前一组 jQuery 维护者的问题,但据推测,有它处理文本节点以及元素会使方法复杂化。它必须检查 nodeType 并设置 nodeValue 如果它是一个文本节点,或者做它当前所做的(我不知道他们是否做 innerText/textContent 或为元素附加一个文本节点,可能是前者)。

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