【问题标题】:"All but not" jQuery selector“所有但不是”jQuery 选择器
【发布时间】:2011-12-17 19:18:49
【问题描述】:

我可以选择(使用 jQuery)HTML 标记中的所有 div,如下所示:

$('div')

但我想从上述选择中排除特定的div(比如说有id="myid")。

如何使用 Jquery 函数做到这一点?

【问题讨论】:

  • 在 jquery 中使用 not 选择器

标签: javascript jquery jquery-selectors


【解决方案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 将是白色的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-10
          • 1970-01-01
          • 1970-01-01
          • 2020-02-05
          • 2014-07-30
          • 1970-01-01
          相关资源
          最近更新 更多