.not()方法使用要过滤的
selector or an object.
.contents()方法returns a jQuery object containing the children和元素的文本节点.
当使用选择器作为.not()的参数时,它将删除所选择的元素,也可以删除所有文本节点.
当一个对象被用作.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”选择器(或任何其他选择器)而不是由对象实例选择的文本节点?
解决方法
发生这种情况的原因可追溯到3年前制定的
this particular edit年.它统一了
.filter()
和
.not()
的方法,大大简化了它们,因为它们是相互有效的对立的.
在上述编辑之前,.not()将内部调用.filter(),如果选择器只是一个字符串,那么它将从this revision开始的过滤集合(即.nodeType === 1)起作用4年前.
这意味着 – 根据您的代码示例 – 在编辑.not(object)之前,还会返回一个空集合,这似乎比其当前行为更合乎逻辑.
现在,.not(object)和.filter(object)对未过滤的集合进行操作,但前面的方法只会表现出行为差异.