【发布时间】:2011-12-17 19:18:49
【问题描述】:
我可以选择(使用 jQuery)HTML 标记中的所有 div,如下所示:
$('div')
但我想从上述选择中排除特定的div(比如说有id="myid")。
如何使用 Jquery 函数做到这一点?
【问题讨论】:
-
在 jquery 中使用 not 选择器
标签: javascript jquery jquery-selectors
我可以选择(使用 jQuery)HTML 标记中的所有 div,如下所示:
$('div')
但我想从上述选择中排除特定的div(比如说有id="myid")。
如何使用 Jquery 函数做到这一点?
【问题讨论】:
标签: javascript jquery jquery-selectors
简单:
$('div').not('#myid');
使用.not() 将从$('div') 返回的集合中删除与给定选择器匹配的元素。
您也可以使用:not() 选择器:
$('div:not(#myid)');
两个选择器做同样的事情,但是 :not() is faster,大概是因为 jQuery 的选择器引擎 Sizzle 可以将其优化为原生的 .querySelectorAll() 调用。
【讨论】:
.not() 比:not() 好远远。跨度>
$('div:not(#myid)');(不带引号)。 @Raynos:为什么? :not() 是一个 CSS3 选择器。如果支持,jQuery 可以直接将选择器传递给querySelectorAll...
.not 更慢并且可读性更差。我应该说“:不是 jQuery 中的选择器”
:not() 中使用引号。这个选择器对于 Selectors 4 来说也不是新的,也没有被更改为允许引用。不过,它已被更改为允许更复杂的选择器。除非我误解了你的评论...
querySelectorAll 是最快的。不是一个真实世界的基准测试,但可以预期,因为 jQuery 内部没有开销。 :not() 实际上更快,大概是因为 Sizzle 知道它可以优化它以使用 querySelectorAll()
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)
你不能轻易地一次删除多个元素:(
【讨论】:
.querySelector() 或 .querySelectorAll() 和 div:not(#myid) 更快...是吗?
【讨论】:
$("div:not(#myid)") 更快...检查sizzlejs优化它,当使用原生Javascript .querySelector()或.querySelectorAll()时。跨度>
var elements = $('div').not('#myid');
这将包括除 ID 为“myid”的所有 div
【讨论】:
$('div:not(#myid)');
我认为这就是你需要的。
【讨论】:
应该这样做:
$('div:not("#myid")')
【讨论】:
您使用 jQuery 库的 .not 属性:
$('div').not('#myDiv').css('background-color', '#000000');
看到它在行动here。 div #myDiv 将是白色的。
【讨论】: