-2

こんにちは、次に jQuery に問題があります。最初は、次のようなマークアップがあります。

<ul>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li class="active">...</li>
</ul>
<ul>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
</ul>
<ul>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
  <li>...</li>
</ul>

jqueryでは、すべての「ul」要素のコレクションが変数に保持されています。contElems。この変数で、クラスがアクティブな li を見つけて、次の elem を取得しようとします。コードは次のようになります。

contElems.find('li.active').next();

アクティブな li が ul の最後ではない場合に機能しますが、ul の最後である場合、next() は -1 を返します。コードの何が問題になっていますか? そして、どうすればそれを機能させることができますか?:)

4

5 に答える 5

1

あなたができることは次のとおりです。

contElems.find('li.active').siblings().first();

そうすれば、一致しulたのが最後の兄弟であっても、1人の兄弟を確実に獲得できます...

于 2012-11-19T20:30:46.117 に答える
0

の後に次の要素がないためli.activeです。アクセスしようとしているだけの場合はli.active、 を使用してくださいcontElems.find('li.active')

どのような動作を期待していますか?

于 2012-11-19T20:29:09.087 に答える
0

それが最後のものであれば、誰もいないnext()ので、偽の値が得られます。個人的には と書いnext()ていたら returnnullにしていたのですが、戻り値が の-1場合は次の要素がないということになったそうです。

于 2012-11-19T20:29:34.040 に答える
0

jQueryのドキュメントから:

説明: 一致した要素のセット内の各要素の直後の兄弟を取得します。セレクターが指定されている場合、そのセレクターに一致する場合にのみ、次の兄弟を取得します。

最後の要素の「直後の兄弟」はありません。

これを試すことができます:

function getNext(contElems) {
    var next = contElems.find('li.active').next();
    if (next != undefined && next != null && next != -1 && next.length > 0)
        return next;

    var list = contElems.find('li'),
        eq = list.index(contElems.find('li.active'));

    next = list.eq(eq + 1);     return next;
}
于 2012-11-19T20:29:55.503 に答える
0

.next()次の兄弟 (同じ親) を見つけます。li次のul(兄弟ではなくいとこ)を見つけたい場合は、次のように実行できます。

var el = contElems.find('li.active').next();
if (el.length == 0) {
    el = contElems.find('li.active').closest('ul').next().find('li:first');
}
if (el.length == 0) {
    alert("Last li is active!");
}
于 2012-11-19T20:31:00.683 に答える