Как выбрать только одного брата с jQuery?

у меня есть этот код:

<ul>
  <li class="foo">foo text</li>
  <li class="foo2">foo2 text</li>
  <!-- more li here -->
  <li class="bar">bar text</li>
  <li class="bar2">bar2 text</li>
  <!-- more li here -->
  <li class="baz">clickme!</li>
</ul>

и

$(".baz").click(function() {
    alert("test: " + $(this).siblings(".bar")[0].text()); // Doesn't work
});

siblings(".bar")[0] не работает. (не появляется окно предупреждения и нет ошибки javascript)

каков правильный способ выбрать только одного брата ?

jsFiddle попробовать

Edit: Я не хочу использовать prev() или next().

6 ответов


можно использовать eq способ уменьшить набор элементов по определенной индекса:

$(this).siblings(".bar").eq(0).text()

это позволит выбрать первый элемент в наборе. В вашем случае вы можете просто использовать prev, поскольку элемент, который вы ищете, находится непосредственно перед нажатым элементом:

$(this).prev(".bar").text()

проблема с методом нотации массива, который вы использовали, заключается в том, что он возвращает фактический узел DOM, содержащийся в объекте jQuery, и это не будет text метод. eq является эквивалентным методом jQuery для этого.


вы также можете захватить первый элемент из объекта jQuery, используя first:

alert(siblings(".bar").first().text());

http://api.jquery.com/next/ и / или http://api.jquery.com/prev/.

Так было бы:

$(this).prev().text()); или $(this).next().text());


вы можете использовать next () или prev ();

$(".baz").click(function() {
    alert("test: " + $(this).prev(".bar").text());
});

скрипка здесь http://jsfiddle.net/fMT5x/2/


вы можете:

$(".baz").click(function() {
    alert("test: " + $(this).prev.html());
});

но вы должны быть уверены ,что предыдущий элемент существует.бэз

или (лучше)

$(".baz").click(function() {
    alert("test: " + $(this).siblings(".bar").eq(0).text());
});

или (хуже), просто для справки, никогда не используйте его:)

$(".baz").click(function() {
    var text = 0;
    $(this).siblings(".bar").each(function(){ text = $(this).text(); break; });
    alert("test: " + text);
});

вот ссылка, которая полезна для изучения выбора элемента братьев и сестер в Jquery.

Как выбрать только одного брата с jQuery

$("selector").nextAll(); 
$("selector").prev(); 

вы также можете найти элемент с помощью jQuery селектора

$("h2").siblings('table').find('tr'); 

для получения дополнительной информации, см. Эту ссылку next (), nextAll(), prev(), prevAll (), найти () и братьев и сестер в JQuery