首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与jquery slice相反/选择slice之外的项目

与jquery slice相反/选择slice之外的项目
EN

Stack Overflow用户
提问于 2012-10-25 21:49:27
回答 3查看 3K关注 0票数 3

我有一个javascript (jQuery)分页系统,它的工作原理是通过在页面上隐藏带有复选框的过滤器来隐藏项目。它工作得很好,但我现在正在尝试对这个动态结果集进行分页,所以我希望隐藏特定范围之外的所有项。

jQuery slice函数看起来有点适合这样,只是它选择了范围内的所有项。我想要做的恰恰相反。我想选择该范围之外的所有项目。

代码语言:javascript
复制
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”或其他核心函数。

谢谢大家的指点!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-26 23:53:35

由于性能对每个人都很重要,Dan的答案绝对不应该是公认的答案,因为它的速度大约是使用Kevin B的答案的三倍。

如果我们运行这段代码

代码语言:javascript
复制
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

在数据使用率非常低的情况下,这可能不是太大的问题,但在我的例子中,我要检查的表行可能相当多,这将是非常重要的。

票数 2
EN

Stack Overflow用户

发布于 2012-10-25 21:51:08

您可以像这样使用.not()

代码语言:javascript
复制
$(function(){
    $('li').not($('li').slice(3,6)).css('background','#f00'); 
});​

FIDDLE

票数 2
EN

Stack Overflow用户

发布于 2012-10-25 22:10:37

你也可以使用.filter来做这件事:

代码语言:javascript
复制
$(function(){
    $("li").filter(function(i) { 
        return i < 3 || i > 5;
    }).css(...);
});

代码语言:javascript
复制
$(function(){
    $("li").filter(":lt(3),:gt(5)").css(...);
});

或者(可能效率较低)

代码语言:javascript
复制
$(function(){
    $("li:lt(3),li:gt(5)").css(...);
});

http://jsfiddle.net/CYVPh/1/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13070087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档