15

.not()方法采用选择器或用于过滤的对象。

.contents()方法返回一个包含元素的子节点和文本节点的jQuery 对象。

When a selector is used as the argument for .not()it removes the selected elements but also all the text nodes .

当一个对象被用作论据时,.not()它会删除该对象而不是文本节点。

例子:

<p>This is a <span id="aSpan">paragraph</span> tag</p>

$("p").contents().not("span");
> []

但!

var $sp = $("p span");
$("p").contents().not($sp);
> ["This is a ", " tag"]

var sp = document.getElementById("aSpan");
$("p").contents().not(sp);
> ["This is a ", " tag"]

为什么文本节点由“span”选择器(或任何其他选择器)而不是对象实例选择?

4

1 回答 1

3

发生这种情况的原因可以追溯到3 年前的这个特殊编辑。它统一了.filter().not()方法,大大简化了两者,因为它们实际上是彼此的对立面。

在上述编辑之前,如果选择器不是一个字符串,它会在内部.not()调用,所以它会从4 年前的这个修订版开始对过滤的集合(即 )进行操作。.filter().nodeType === 1

这意味着 - 根据您的代码示例 - 在编辑之前.not(object)也会返回一个空集合,这似乎比其当前行为更合乎逻辑。

现在,两者都.not(object).filter(object)未过滤的集合进行操作,尽管只有前一种方法会表现出行为差异。

于 2012-12-07T15:44:54.373 回答