Выбор предыдущего тега привязки и добавление к нему класса с помощью jQuery - PullRequest
1 голос
/ 04 декабря 2011

В основном у меня есть два тега привязки, разделенных div.

<a class="foo"></a>

<div class="count">0</a>

<a class="bar"></a>

, и я делаю что-то вроде этого:

       var addClass = $(this).parent().children('a:first-child').addClass('new');

Затем он добавит его впервый тег привязки, например, так:

<a class="foo new"></a>

Я знаю, что использование селектора nth: child довольно дорого, поэтому мне было интересно, есть ли более простой способ выбрать этот предыдущий узел привязки (при игнорировании второго).

Ответы [ 3 ]

3 голосов
/ 04 декабря 2011

Вы можете сделать это

$(this).parent().children('a:eq(0)').addClass('new');

Подробнее о: eq ()

В качестве альтернативы, если между <a> и * нет элементов1009 *, вы можете сделать

$(this).prev('a');

Подробнее о .prev ()

2 голосов
/ 04 декабря 2011

Я бы, вероятно, объединил prevAll с first (или eq(0), поскольку first просто вызывает eq(0) - ноЯ нахожу first более читабельным):

$(this).prevAll("a").first().addClass("new");
// or
$(this).prevAll("a").eq(0).addClass("new");

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

Возможно, вы захотите использовать селектор :first с prevAll, чтобы избежать создания ненужного списка братьев и сестер, но, к моему удивлению, лучше работает , чтобыиспользуйте first за фактом.

0 голосов
/ 04 декабря 2011

Как насчет:

$(this).siblings('a').eq(0).addClass(0);

На самом деле, если ваша структура проста, как в вашем примере, вы можете просто сделать следующее:

$(this).prev().addClass(0);

jQuery's traversal *Методы 1008 * дают вам множество способов добраться до любого пункта назначения.

...