40

有谁知道是否存在某种选择器来从匹配集中选择所有元素,但由指示索引给出的元素。例如:

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

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

4

5 回答 5

76

使用not

$('li').not(':eq(2)');
于 2012-08-21T14:38:19.560 回答
10

好吧,这只是

$("li:not(:eq(2))");
于 2012-08-21T14:39:25.897 回答
7

其他答案可以正常工作,但作为替代方案,您可以实现自己的自定义选择器neq

$.extend($.expr[":"], {  
    neq: function(elem, i, match) {  
        return i !== (match[3] - 0);
    }  
});  

然后你就可以按照你最初的建议去做了。

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

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

$("li:neq(2)").length;
于 2012-08-21T14:42:38.580 回答
6

我会在这种情况下使用过滤器,

$('li').filter(function (i, item) {
   return i != 2;
})
于 2012-08-21T14:51:30.270 回答
1

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

$.fn.neg = function (index) {
    return this.pushStack( this.not(':eq(' + index + ')') );
}
于 2012-08-21T15:04:13.760 回答