6

我不知道答案真的很烦我,我认为这很简单。我想从选定元素中获取下一个和上一个元素到一个限制(比如 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>

所以我想在 active 之前选择两个元素,在 active 之后选择 2 个元素li。我试过做类似的事情: $('li.active').nextAll(':eq(2)');然后将它添加到相同的 usingprevAll但它选择一个元素 2 兄弟姐妹而不是整个组。

一定有一种简单的方法可以做到这一点,我错过了,有什么建议吗?

注意我不能编辑 HTML,它是动态生成的。

4

2 回答 2

5

(至少)有两种方法可以解决这个问题。您可以将prevAll()nextAll() 链接slice()中,然后使用add()组合这两个集合:

var $active = $("li.active");
var $around = $active.prevAll().slice(0, 2)
                     .add($active.nextAll().slice(0, 2));

或者您可以获取活动元素的index() ,用于获取该索引周围的兄弟姐妹,然后使用not()slice()过滤掉活动元素:

var $active = $("li.active");
var activeIndex = $active.index();
var $around = $active.siblings().addBack()
                     .slice(Math.max(0, activeIndex - 2), activeIndex + 3)
                     .not($active);
于 2013-10-08T10:03:23.210 回答
4

您可以使用nextAllprevAll结合小于 :lt(index)选择器
在您的情况下:lt(2)

var current = $('.active'),
    next = current.nextAll(':lt(2)'),
    prev = current.prevAll(':lt(2)'),
    all = current.add(next).add(prev);
于 2013-10-08T10:15:17.110 回答