【问题标题】:jQuery remove() everything except an itemjQuery remove() 除项目外的所有内容
【发布时间】:2014-01-15 18:47:36
【问题描述】:

我目前有以下代码:

$( '.spandiv:eq(1)' ).remove();

这很好地删除了跨度列表中的第二个项目(因为它使用基于 0 的索引),这很棒。不过,我有一个问题。

是否可以删除所有除了第二项?

我知道我可以使用lt()gt()' but wondered if there was anot equal` 选项进行编码?

【问题讨论】:

    标签: jquery jquery-selectors equals


    【解决方案1】:

    您可以使用:not.not()

    $( '.spandiv:not(:eq(1))' ).remove();
    

    FIDDLE

    【讨论】:

    • 啊,太好了——没想到你能做到!什么是性能影响,知道吗?
    • @Homer_J 我建议使用 $('.spandiv').not(':eq(1)') 而不是 $('.spandiv:not(:eq(1))') ,因为 .spandiv:not(:eq(1)) 将 - 我认为它仍然是正确的 - 强制 jQuery 使用 Swizzle 进行整个查询,而$('.spandiv').not(':eq(1)') 将使用本机功能(适用于现代浏览器)按 spandiv 类查找元素,然后过滤该结果。
    • 除非你有很多元素要过滤,否则性能影响不会那么明显,无论你使用:not 还是.not 都没有那么重要,因为 Sizzle 是 jQuery 的选择器引擎,无论如何都会使用它。
    • 谢谢,一个部分有400多个元素!所以看看它是如何工作的,很有趣。
    • @Homer_J, @adeneo jQuery/Swizzle 首先检查它是否是一个简单的选择器,然后为它们使用getElementsByTagNamegetElementByIDgetElementsByClassName(如果不支持getElementsByClassName,Swizzle 将遍历整个 DOM)。如果选择器不是一个简单的选择器,Swizzle 将尝试使用 querySelectorAll,如果不可能(在这种情况下是因为 :eq),它将启动 fallback 以遍历 整个 DOM。因此,如果 document.querySelectorAll(yourQuery) 不起作用,并且您对 $(yourQuery) 有明显的性能影响,您可能需要将其拆分。
    【解决方案2】:

    你可以使用.not()

    $('.spandiv').not(':eq(1)').remove();  
    

    JSFIDDLE DEMO

    【讨论】:

      猜你喜欢
      • 2014-02-20
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2011-01-16
      • 2012-07-08
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      相关资源
      最近更新 更多