jquery $ (this) .prev (". class") не работает - PullRequest
1 голос
/ 09 ноября 2011

Учитывая эту простую настройку

<div class="parent">
   <div class="child">I'm spoiled</div>
</div>
<div class="aunt"></div>
<div class="uncle"></div>

<div class="parent">
   <div class="child">I'm spoiled</div>
</div>
<div class="aunt"></div>
<div class="uncle"></div>

Когда я обнаруживаю клик по классу "дядя", я хочу получить брата ближайшего предыдущего ".parent". Я должен быть в состоянии сделать

$( this ).prev( ".parent" ).children( ".child" ).text();

... но это возвращает пустое.

Если я делаю

$( this ).prev().prev().children( ".child" ).text();

... это возвращает ожидаемый результат: "Я избалован"

Есть ли какие-то ограничения на использование prev ([селектор]), по которому я скучаю?

[UPDATE]

.prevAll () возвращает все предыдущие классы, поэтому результат

$( this ).prevAll( ".parent" ).children( ".child" ).text();

Будет ли "Я испорчен, я испорчен", если я нажму второй ".uncle", что не является результатом, который я хочу.

Мне просто нужен ближайший ближайший предыдущий.

Ответы [ 4 ]

10 голосов
/ 09 ноября 2011

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

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

Также:

Чтобы выбрать все предшествующие элементы одного уровня, а не только предыдущий соседний элемент, используйте метод .prevAll ().

Итак, все, вместо этого используйте метод .prevAll (). http://api.jquery.com/prev/

3 голосов
/ 09 ноября 2011

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

РЕДАКТИРОВАТЬ:

Учитывая ваши последние требования, я думаю, что-то вроде этого будет работать:

$(this).prevUntil(".parent").first().prev().children( ".child" ).text()
1 голос
/ 09 ноября 2011

prev () возвращает только первый предшествующий элемент.

Попробуйте:

$( this ).prevAll( ".parent:first" ).children( ".child" ).text();
0 голосов
/ 15 января 2013

это может быть лучше:

var this = $(this);
var.parent('.parent').prev().children('.children').text();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...