2016-12-26 2 views
0

Бритва/HTML (многие из них):Jquery каждый в случае OnClick

<div class="directory-item" id="@item_id" name="@item_name" style="padding-left: @(indent_level)px; display: @(display)"> 
    <i class="fa @icon_type"></i> 
    @item.ItemName (id: @item_id, name: @item_name, level: @item.Level) 
    <i class="fa fa-angle-right float-right"></i> 
</div> 

Javascript:

$(".directory-item").click(function() { 
    $('div[name*=' + this.id + ']').each(function() { 
     if (this.attr('display') == "none") { 
      this.show(); 
     } else { 
      this.hide(); 
     } 
    }); 
}); 

Основной вопрос: как вы положили "каждый" внутри "щелчок" событие и ссылаться на «каждый» элемент (каждый раз, когда он обращается к элементу) с «этим»? Может быть, я не должен использовать каждое утверждение, но что-то еще?

+0

yes.you должен использовать 'this' или даже обернутый jQuery элемент этого' $ (this) 'для доступа к кликнутому элементу. Затем вы можете получить доступ к относительным элементам, используя такие методы, как 'ближайшее()', 'find' и т. Д. – Shyju

+0

Как бы вы переписали выше, используя find? В основном, я пытаюсь взять идентификатор div, который был нажат, и найти все div с именем, содержащим этот id, а затем показать/скрыть их. – gunslingor

+0

У вас не должно быть более одного элемента с тем же значением идентификатора! Это недопустимый html. Чего вы пытаетесь достичь? – Shyju

ответ

0

В обратном вызове каждого метода вы можете иметь 2 параметра, один для индекса и второй для элемента текущей итерации цикла.

$(function() { 

    $(".directory-item").click(function() { 

     $('div[name*=' + this.id + ']').each(function (a,b) { 
      if ($(b).attr('display') == "none") { 
       $(b).show(); 
      } else { 
       $(b).hide(); 
      } 
     }); 
    }); 
}); 

Если это просто обновление видимости, вы можете использовать toggle а

$('div[name*=' + this.id + ']').each(function (a,b) { 
    $(b).toggle(); 
}); 
+0

Что такое 'attr ('display')' ??? Скорее, свойство стиля – charlietfl

0

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

$(".directory-item").click(function() { 
     $('div[name*=' + this.id + ']').toggle() 
}); 

Использование toggle() покажет такой элемент, если он скрыт и скрыть его, если он не является, и нет необходимости each, поскольку он будет циклически перемещаться по всем соответствующим элементам

Смежные вопросы