Javascript 多个.add的可读性更好,其中包含.eq

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(-

我正在将多个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(-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当然可以,但我觉得它看起来有点尴尬。