jQuery的:eq()的相反操作是什么?

40

有没有人知道是否存在某种选择器可以选择匹配集合中除指定索引的所有元素。例如:

$("li").neq(2).size();

假设有5个元素,最后一个语句会给你4,并且包含DOM中除第二个以外的所有<li>元素。

5个回答

79

使用not方法:

$('li').not(':eq(2)');

如果您想要最快的neq,请使用过滤器,请参见http://jsperf.com/jquery-fastest-neq-filter。 - mike

10

好的,就是这样

$("li:not(:eq(2))");

7
其他答案也可以正常工作,但你也可以实现自己的自定义选择器来使用 "neq"。
$.extend($.expr[":"], {  
    neq: function(elem, i, match) {  
        return i !== (match[3] - 0);
    }  
});  

然后你可以按照最初的建议进行操作。

$("li:neq(2)").size();

尽管另一篇帖子建议使用 .length 而不是 .size,因为它只是一个属性而不需要额外的函数调用,这样会更好。

$("li:neq(2)").length;

1
注意语法,它在1.8中已经改变。https://dev59.com/DWgu5IYBdhLWcg3wDS0G - Kevin B
1
此外,这不是创建一个方法,而是创建了一个伪选择器吗?$("li:neq(2)") - Kevin B

6
我会在这种情况下使用过滤器。
$('li').filter(function (i, item) {
   return i != 2;
})

1

除了自定义选择器外,您还可以将其实现为jQuery插件:

$.fn.neg = function (index) {
    return this.pushStack( this.not(':eq(' + index + ')') );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接