0

Let's say I have following HTML:

<span>
    <span id="x1" class="x">X1</span>
</span>
<span>
    <span>
        <span id="x2" class="x">X2</span>
    </span>
</span>

And $(this) is the <span id="x1" ...>.

What is the best way to find next element matching .x with jQuery? The structure of the actual document is unpredictable, so the HTML provided is only an example.

I can't use nextAll as it only finds siblings. If I do $('.x'), it finds all, but I'll have to iterate/compare. Is there a better solution?

See also: http://jsfiddle.net/JZ9VW/1/.

4

2 に答える 2

6

マークアップの構造について推測することを好まないように思われる場合は、クラスベースのセレクターが最適です。要素が追加/削除されていない場合は、それらを一度選択して、最適化として保持できます。

var exes = $('.x');
var x1 = $('#x1');
var nextEx = exes.eq(exes.index(x1) + 1);

http://jsfiddle.net/mattball/QKawu

本当に予測不可能な HTML 構造では、「次の要素」を要求することは、「指定されたクラス名を持つ要素のコレクション」のコンテキストでのみ意味があります。これはまさに上記のコードが反映しているものです。

于 2013-02-05T00:43:03.760 に答える
1

親を見つけてから、親の次の兄弟を取得してから、クラスを見つけます。

.parent().next().find('.x')

于 2013-02-05T00:40:43.590 に答える