Javascript 多个.add的可读性更好,其中包含.eq
我正在将多个li收集到一个对象中进行分页Javascript 多个.add的可读性更好,其中包含.eq,javascript,jquery,performance,readability,Javascript,Jquery,Performance,Readability,我正在将多个li收集到一个对象中进行分页 var li = $(this).find('li'); if(li.length > 15) { var activeId = li.filter('.active').index(); li.eq(0) .add(li.eq(1)) .add(li.eq(2)) .add(li.eq(-1)) .add(li.eq(-2)) .add(li.eq(-
var li = $(this).find('li');
if(li.length > 15) {
var activeId = li.filter('.active').index();
li.eq(0)
.add(li.eq(1))
.add(li.eq(2))
.add(li.eq(-1))
.add(li.eq(-2))
.add(li.eq(-3))
.add(li.eq(activeId))
.add(li.eq(activeId-1))
.add(li.eq(activeId-2))
.add(li.eq(activeId-3))
.add(li.eq(activeId+1))
.add(li.eq(activeId+2))
.add(li.eq(activeId+3))
.addClass('dosomething');
li.each(function() {
// do something...
});
}
HTML示例:
<ul>
<li><a href="#…">1</a></li>
<li class="active"><a href="#…">2</a></li>
<li><a href="#…">3</a></li>
<li><a href="#…">4</a></li>
<li><a href="#…">5</a></li>
...
<li><a href="#…">16</a></li>
</ul>
...
但这看起来很直截了当,不太好用,也不太可读。因此,我正在寻找一种方法来编写更具可读性的代码 要将jQuery数组集合缩减为特定的元素开始-结束索引集,可以使用
$(“ul”)。每个(函数(){
var$li=$(this.find('li'),
tot=$li.length;
如果(tot>15){
var idx=$li.filter('.active').index(),
first3=$li.slice(0,3),//slice
middle7=$li.slice(Math.max(0,idx-3),Math.min(tot,idx+4)),//slice
last3=$li.slice(tot-3,tot),//slice
$group=first3.add(middle7.add(last3);//将它们分组
$group.addClass(“dosomething”)。每个(函数(){
//对那组李元素做些什么
});
}
});代码>
li.active{
颜色:红色;
}
.剂量{
颜色:蓝色;
}
- 一,
- 二,
- 三,
- 四,
- 五,
- 六,
- 七,
- 8
- 九,
- 十,
- 十一,
- 十二,
- 十三,
- 十四,
- 十五
- 十六,
- 十七,
- 十八
您添加的HTML没有太多解释-总的来说,您的问题不清楚,请尝试添加更多有关您实际追求的内容的详细信息。我只需要将它们放在一个对象中,以不同的方式显示。我无法更改以下代码,我只能更改li对象的收集方式。:D好的,但您能否以文本形式解释需要收集的所有li元素?哪些不需要收集。@RokoC.Buljan我需要前三个,最后三个,以及活动li的左右三个。@AlonEitan当然可以,但我觉得它看起来有点尴尬。