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>

したがって、アクティブの前に 2 つの要素を選択し、アクティブの後に 2 つの要素を選択したいと考えていますli。私は次のようなことを試み $('li.active').nextAll(':eq(2)');ました:そしてそれを同じ使用に追加しますprevAllが、グループ全体ではなく2兄弟離れた1つの要素を選択します。

私が見逃したこれを行う簡単な方法があるに違いありません。何か提案はありますか?

NB HTML は編集できません。動的に生成されます。

4

2 に答える 2

5

この問題には (少なくとも) 2 つのアプローチがあります。prevAll()nextAll()slice()にチェーンしてから、 add()を使用して 2 つのセットを組み合わせることができます。

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

より小さいセレクターを使用nextAllしてprevAll組み合わせることができます (あなたの場合 :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 に答える