jQuery: предыдущая (<selector>) не работает? - PullRequest
17 голосов
/ 28 марта 2011

У меня проблемы с использованием prev () в jQuery, где он не выбирает нужный элемент.

Моя структура HTML выглядит следующим образом:

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

«Активный» раздел #contact. Я хочу выбрать предыдущий раздел, пропустив <hr>

active = active.prev('section') не похоже на работу. Я думаю, что я могу читать документы неправильно ...

Если я достану <hr>, все будет прекрасно. Любые идеи о том, как пропустить <hr> на prev ()?

ТИА

Ответы [ 3 ]

26 голосов
/ 28 марта 2011

Я думаю, что я могу читать документы неправильно ...

Документы API для .prev() дают это описание:

Описание: Получить непосредственно предшествующего брата каждого элемента в наборе совпадающих элементов, необязательно отфильтрованного селектором.

Итак, проблема в том, что hr находится там и ищет .prev(), а затем проверяет селектор 'section'.


Есть идеи, как пропустить <hr> на prev ()?

Вы можете вызвать .prev() один раз, чтобы пропустить этот hr, а затем вызвать его снова для раздела:

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

Или используйте .prevAll() и найдите ближайший предшествующий (в случае, если перед ним есть какие-либо другие разделы):

active = active.prevAll('section').first();
4 голосов
/ 28 марта 2011

Используйте prevAll () вместо

active = active.prevAll('section')

из документации jQuery:

prev () => «Получить ближайшего предшествующего брата» , поэтому он получитпервый элемент, поэтому при удалении <hr> он будет работать.

1 голос
/ 28 марта 2011

Или попробуйте:

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