我有一个javascript (jQuery)分页系统,它的工作原理是通过在页面上隐藏带有复选框的过滤器来隐藏项目。它工作得很好,但我现在正在尝试对这个动态结果集进行分页,所以我希望隐藏特定范围之外的所有项。
jQuery slice函数看起来有点适合这样,只是它选择了范围内的所有项。我想要做的恰恰相反。我想选择该范围之外的所有项目。
HTML:
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
<li>Item 7</li>
<li>Item 8</li>
<li>Item 9</li>
<li>Item 10</li>
</ul>
jQuery:
$(function(){
$('li').slice(3,6).css('background','#f00');
});我已经做了一个小提琴:http://jsfiddle.net/SLuXz/1/ -我想做的是让项目1,2,3,7,8,9和10用红色显示。我知道我可以用两个切片(0-3和7-10)来做到这一点,但我想知道是否有更好的方法来做到这一点,比如使用“not”或其他核心函数。
谢谢大家的指点!
发布于 2015-03-26 23:53:35
由于性能对每个人都很重要,Dan的答案绝对不应该是公认的答案,因为它的速度大约是使用Kevin B的答案的三倍。
如果我们运行这段代码
var Start = new Date().getTime();
for(i = 0; i<10000; i++){
//How Dan's answer suggests to do this
var e = $('.elem').not($('.elem').slice(0,99));
}
var Finish = new Date().getTime();
console.log('Using selector filter',Finish-Start);
var Start = new Date().getTime();
for(i = 0; i<10000; i++){
//A better way to do Dan's answer, but still twice as slow
var o = $('.elem');
var e = o.not(o.slice(0,99));
}
var Finish = new Date().getTime();
console.log('Using selector filter',Finish-Start);
Start = new Date().getTime();
for(i = 0; i<10000; i++){
//The fastest method
var e = $('.elem').filter(function(i) {
return i < 0 || i > 99;
});
}
Finish = new Date().getTime();
console.log('Using object filter',Finish-Start);观察控制台,我们得到以下输出:
使用选择器过滤器989的
使用选择器过滤器683
使用对象过滤器349
在数据使用率非常低的情况下,这可能不是太大的问题,但在我的例子中,我要检查的表行可能相当多,这将是非常重要的。
发布于 2012-10-25 21:51:08
您可以像这样使用.not()
$(function(){
$('li').not($('li').slice(3,6)).css('background','#f00');
});FIDDLE
发布于 2012-10-25 22:10:37
你也可以使用.filter来做这件事:
$(function(){
$("li").filter(function(i) {
return i < 3 || i > 5;
}).css(...);
});或
$(function(){
$("li").filter(":lt(3),:gt(5)").css(...);
});或者(可能效率较低)
$(function(){
$("li:lt(3),li:gt(5)").css(...);
});http://jsfiddle.net/CYVPh/1/
https://stackoverflow.com/questions/13070087
复制相似问题