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()
方法不支持文字节点?我期望在任何文本节点上使用此方法都能够更改其节点值。
我很确定这是有充分理由的,我不能只是得到它。
答案 0 :(得分:1)
可能是什么原因?
因为那不是text
的目的。来自the docs:
...设置匹配的元素
的文本内容
(我的重点)
为什么它的设计目的不是为John Resig和/或当前的jQuery维护者提供的一个问题,但是在猜测时,让它处理文本节点以及元素会使方法复杂化。如果它是文本节点,则必须检查nodeType
并设置nodeValue
,或者执行当前的操作(我不知道它们是innerText
/ {{ 1}}或为元素附加一个文本节点,可能是前者。
大多数jQuery都是以元素为中心的,忽略了其他节点。 textContent
是在节点级别工作的极少数方法之一。