“所有但不是”jQuery 选择器
Posted
技术标签:
【中文标题】“所有但不是”jQuery 选择器【英文标题】:"All but not" jQuery selector 【发布时间】:2011-12-17 19:18:49 【问题描述】:我可以选择(使用 jQuery)html 标记中的所有 div,如下所示:
$('div')
但我想从上述选择中排除特定的div
(比如说有id="myid"
)。
如何使用 Jquery 函数做到这一点?
【问题讨论】:
在 jquery 中使用 not 选择器 【参考方案1】:简单:
$('div').not('#myid');
使用.not()
将从$('div')
返回的集合中删除与给定选择器匹配的元素。
您也可以使用:not()
选择器:
$('div:not(#myid)');
两个选择器做同样的事情,但是 :not()
is faster,大概是因为 jQuery 的选择器引擎 Sizzle 可以将其优化为原生的 .querySelectorAll()
调用。
【讨论】:
@Raynos 我不认为它一定是坏,但使用.not()
比:not()
好远远。跨度>
我认为应该是$('div:not(#myid)');
(不带引号)。 @Raynos:为什么? :not()
是一个 CSS3 选择器。如果支持,jQuery 可以直接将选择器传递给querySelectorAll
...
@FelixKling 作为selectors4 的一部分很好。然而,在 jQuery 中,它比 .not
更慢并且可读性更差。我应该说“:不是 jQuery 中的选择器”
@Raynos:没有选择器规范允许在:not()
中使用引号。这个选择器对于 Selectors 4 来说也不是新的,也没有被更改为允许引用。不过,它已被更改为允许更复杂的选择器。除非我误解了你的评论...
@PeterKrauss 我刚刚做了a jsPerf benchmark,这标志着querySelectorAll
是最快的。不是一个真实世界的基准测试,但可以预期,因为 jQuery 内部没有开销。 :not()
实际上更快,大概是因为 Sizzle 知道它可以优化它以使用 querySelectorAll()
【参考方案2】:
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);
你可以用老式的方式来做。这么简单的东西就不需要jQuery了。
专业提示:
一组dom元素只是一个数组,所以在NodeList
上使用你最喜欢的toArray
方法。
向集合中添加元素只是
set.push.apply(set, arrOfElements);
从集合中移除一个元素是
set.splice(set.indexOf(el), 1)
你不能轻易地一次删除多个元素:(
【讨论】:
现在(2017 年)也许使用原生 javascript.querySelector()
或 .querySelectorAll()
和 div:not(#myid)
更快...是吗?【参考方案3】:
$("div:not(#myid)")
[doc]
或
$("div").not("#myid")
[doc]
是选择除一个 id 之外的所有内容的主要方法
你可以看到demo here
【讨论】:
今天(2017)也许$("div:not(#myid)")
更快...检查sizzlejs优化它,当使用原生Javascript .querySelector()
或.querySelectorAll()
时。跨度>
【参考方案4】:
var elements = $('div').not('#myid');
这将包括除 ID 为“myid”的所有 div
【讨论】:
【参考方案5】:$('div:not(#myid)');
我认为这就是你需要的。
【讨论】:
【参考方案6】:应该这样做:
$('div:not("#myid")')
【讨论】:
【参考方案7】:您使用 jQuery 库的 .not
属性:
$('div').not('#myDiv').css('background-color', '#000000');
看到它在行动here。 div #myDiv 将是白色的。
【讨论】:
以上是关于“所有但不是”jQuery 选择器的主要内容,如果未能解决你的问题,请参考以下文章