我不知道这个问题的答案,这真的让我很恼火,我以为这很简单。我想从选定元素中获取下一个和上一个元素到一个限制(比如 2)。这是一个例子:
<ul>
<li>link 1</li>
<li>link 2</li>
<li>link 3</li>
<li>link 4</li>
<li class='active'>link 1</li>
<li>link 6</li>
<li>link 7</li>
<li>link 8</li>
<li>link 9</li>
</ul>
所以我想选择事件li
之前的两个元素和之后的两个元素。我尝试过做类似的事情:
$('li.active').nextAll(':eq(2)');
然后使用 prevAll
将其添加到同一个元素中,但它选择一个元素 2 个兄弟元素离开而不是整个团队。
一定有一种我错过的简单方法,有什么建议吗?
注意我无法编辑 HTML,它是动态生成的。
最佳答案
(至少)有两种方法可以解决这个问题。可以链prevAll()和 nextAll()进入slice() ,然后使用 add()合并两组:
var $active = $("li.active");
var $around = $active.prevAll().slice(0, 2)
.add($active.nextAll().slice(0, 2));
或者您可以获取 index()的事件元素,使用 slice()
获取该索引周围的同级元素,然后使用 not() 过滤掉事件元素:
var $active = $("li.active");
var activeIndex = $active.index();
var $around = $active.siblings().addBack()
.slice(Math.max(0, activeIndex - 2), activeIndex + 3)
.not($active);
关于Jquery Next/NextAll/NextUntil 具有计数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19244327/