19

jQueryでprev()を使用すると、適切な要素が選択されないという問題が発生します。

私のHTML構造は次のとおりです。

<section id="about">
    ...
</section>
<hr>
<section id="contact">
    ...
</section>

「アクティブ」セクションは#contactです。前のセクションをスキップして選択したい<hr>

active = active.prev('section')動作していないようです。私はドキュメントを間違って読んでいる可能性があると思います...

私が取り出すと、<hr>すべてが美しく機能します。<hr>prev()をスキップする方法について何かアイデアはありますか?

TIA

4

4 に答える 4

28

私はドキュメントを間違って読んでいる可能性があると思います...

この説明を提供するためのAPIドキュメント:.prev()

説明:一致した要素のセット内の各要素の直前の兄弟を取得します。オプションでセレクターによってフィルター処理されます。

したがって、問題は、hrがそこにあり、によって検索されてから、セレクター.prev()に対してテストされることです。'section'


<hr>prev()をスキップする方法について何かアイデアはありますか?

.prev()一度呼び出すとスキップしてhr、セクションでもう一度呼び出すことができます。

active = active.prev().prev('section');

または.prevAll()、最も近い前のセクションを使用して見つけます(その前に他のセクションが発生している場合):

active = active.prevAll('section').first();
于 2011-03-27T22:29:50.940 に答える
7

代わりにprevAll()を使用してください

active = active.prevAll('section').first();

jQueryドキュメントから:

prev()=> "直前の兄弟を取得する"ので、最初の要素のみを取得します。

prevAll()=> "一致した要素のセット内の各要素の先行するすべての兄弟を取得します。オプションで、セレクターによってフィルター処理されます。"

そのため、を削除すると<hr>、で機能しprev()ます。

于 2011-03-27T22:30:35.433 に答える
1

または試してみてください:

<section id="about">
    ...
<hr>
</section>
<section id="contact">
    ...
</section>
于 2011-03-27T22:31:30.447 に答える
1

ただやる

active = active.prevAll('section').eq(0);

.prev()と.next()は、特定のセレクターを指定したかどうかに関係なく、最も近い兄弟のみを選択するようです。そのセレクターが兄弟と一致しない場合、.next('section')。lengthは0になります。したがって、上記のメソッドを使用すると、セレクターと一致する先行するすべての兄弟を取得し、.eq(0)を使用して最も近い兄弟を選択します。 。

于 2019-09-28T23:01:29.623 に答える