【发布时间】:2012-08-16 22:33:08
【问题描述】:
有谁知道是否存在某种选择器来从匹配集中选择所有元素,但由指示索引给出的元素。例如:
$("li").neq(2).size();
假设有 5 个元素,最后一条语句将给出 4 个,并且将包含所有 <li> 元素,但 DOM 中的第二个元素除外。
【问题讨论】:
标签: javascript jquery jquery-selectors
有谁知道是否存在某种选择器来从匹配集中选择所有元素,但由指示索引给出的元素。例如:
$("li").neq(2).size();
假设有 5 个元素,最后一条语句将给出 4 个,并且将包含所有 <li> 元素,但 DOM 中的第二个元素除外。
【问题讨论】:
标签: javascript jquery jquery-selectors
使用not:
$('li').not(':eq(2)');
【讨论】:
好吧,只是
$("li:not(:eq(2))");
【讨论】:
其他答案也可以,但作为替代方案,您可以为 neq 实现自己的自定义选择器
$.extend($.expr[":"], {
neq: function(elem, i, match) {
return i !== (match[3] - 0);
}
});
然后你就可以按照你最初的建议去做了。
$("li:neq(2)").size();
虽然另一篇文章建议使用.length 而不是.size,这会更好,因为它只是一个属性而不是额外的函数调用。
$("li:neq(2)").length;
【讨论】:
$("li:neq(2)")
我会在这种情况下使用过滤器,
$('li').filter(function (i, item) {
return i != 2;
})
【讨论】:
除了自定义选择器之外,您还可以将其实现为 jQuery 插件:
$.fn.neg = function (index) {
return this.pushStack( this.not(':eq(' + index + ')') );
}
【讨论】: