JQuery $(this) Дочерний селектор

Я использую это на странице:

jQuery('.class1 a').click( function() {
  if ($(".class2").is(":hidden")) {
    $(".class2").slideDown("slow");
  } else {
    $(".class2").slideUp();
  }
});

со структурой на странице позже, которая выглядит так:

<div class="class1">
  <a href="...">text</a>
  <div class="class2">text</div>
</div>

это работает нормально, за исключением случаев, когда у вас есть многополюсные наборы class1/class2, например:

<div class="class1">
  <a href="...">text</a>
  <div class="class2">text</div>
</div>
<div class="class1">
  <a href="...">text</a>
  <div class="class2">text</div>
</div>
<div class="class1">
  <a href="...">text</a>
  <div class="class2">text</div>
</div>

как изменить исходный код jquery, чтобы он влиял только на class2 под текущим class1, который был нажат? Я пробовал варианты того, что было рекомендовано на этой странице: Как получить детей $(это) селектор? но он еще не заработал

4 ответов


лучший способ с HTML, который у вас есть, вероятно, будет использовать next функция, например:

var div = $(this).next('.class2');

так как обработчик щелчка происходит с <a>, вы также можете перейти к родительскому DIV, а затем искать второй DIV. Вы бы сделали это с помощью комбинации parent и children. Этот подход был бы лучшим, если HTML, который вы размещаете, не совсем такой, и второй DIV может быть в другое место относительно ссылки:

var div = $(this).parent().children('.class2');

если вы хотите, чтобы "поиск" не ограничивался непосредственными детьми, вы бы использовали find вместо children в примере выше.

кроме того, всегда лучше добавлять селекторы классов с именем тега, если это вообще возможно. то есть, если только <div> теги будут иметь эти классы, сделайте селектор div.class1, div.class2.


Это намного проще с .slideToggle():

jQuery('.class1 a').click( function() {
  $(this).next('.class2').slideToggle();
});

EDIT: сделал это .далее, вместо .братья и сестры!--4-->

http://www.mredesign.com/demos/jquery-effects-1/

вы также можете добавить cookie, чтобы помнить, где вы находитесь...

http://c.hadcoleman.com/2008/09/jquery-slide-toggle-with-cookie/


в событии click "this" - это тег a, который был нажат

jQuery('.class1 a').click( function() {
   var divToSlide = $(this).parent().find(".class2");
   if (divToSlide.is(":hidden")) {
      divToSlide.slideDown("slow");
   } else {
      divToSlide.slideUp();
   }
});

есть несколько способов добраться до div, хотя вы также можете использовать .родной брат. ,следующий и т. д.


http://jqapi.com/ Обход -- > Обход Дерева --> Дети