Лучший метод, чтобы пересечь в каждый элемент и выполнить действие с помощью jQuery

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

Пожалуйста, см. мой код до сих пор:

<script type="text/javascript">
jQuery(document).ready(function($) {
     var container = $('.container');

     container.each(function() {
         //if all list item has class of hidden then hide parent container
          container.hide();

         //if not all list item has class of hidden then show parent container
          container.show();
     });
});
</script>

<div class="container container1">
     
  • item 1
  • item 3
  • item 4
</div> <div class="container container2">
</div>

Из кода выше желаемого результата container2, должен быть полностью скрыт, потому что у всего пункта списка в есть класс "скрытых". В то время как container1 показывает, потому что не всем пунктам списка "скрыли" класс.

Как вы видите, я заставил до использования "каждой" функции повторять через контейнеры, но я застреваю о том, как осуществить, где это проверит каждый пункт списка на определенный класс. Моя мысль должна была бы выполнить другую каждую функцию в нем? Но не уверенный...

Спасибо за взгляд.

0
Почему необходимо выполнить второй (" , если не у всего пункта списка есть класс скрытых, тогда показывают родительский контейнер ")?
добавлено автор Alexander, источник
О, потому что это - на самом деле функция, которая вызвана как отзыв поэтому, если это скрывает его, это также должно показать его, если критериям соответствуют.
добавлено автор user381800, источник

5 ответы

Играть в кодовый гольф:

$('.container').each(function() {
    $(this).toggle(!!$('li:not(.hidden)',this).length);
});

http://jsfiddle.net/mblase75/Ajjkc/

3
добавлено
Действительно? Хорошо работает для меня: jsfiddle.net/mblase75/Ajjkc/5
добавлено автор Blazemonger, источник
это, кажется, работает, однако, когда это называют снова, контейнеры не показывают... Другой слова, это скрывает его правильно, но запрос его во второй раз не заставляет контейнер появиться снова. это могло быть то, потому что, как только контейнер скрыт, "каждая" функция не видят его? Если так, как исправить это? Спасибо за ответ
добавлено автор user381800, источник
container.each(function() {
    var $this = $(this);
    if ( $this.find('li:not(.hidden)').length ) {
        $this.show();
    } else {
        $this.hide();
    }
});

Here's the fiddle: http://jsfiddle.net/5AHQZ/

1
добавлено

Можно далее выбрать с контейнер как контекст и скройте контейнер, когда количество скрытых пунктов будет равно всем пунктам списка. Покажите иначе.

$('.container').each(function() {
  var li1 = $('li', $(this)).length;
  var li2 = $('li.hidden', $(this)).length;
  if (li1 == li2)
    $(this).hide();
  else
    $(this).show();
});

Посмотрите JSFiddle для тестирования.

1
добавлено
$('.container').each(function() {
    if ($(this).find('.item.hidden').length == $(this).find('.item').length)
        $(this).hide();
    else
        $(this).show();        
});
0
добавлено

То, что вы пропускаете, является чем-то вроде этого, вы петля:

jQuery(document).ready(function($) {
     var container = $('.container > ul > li');

     container.each(function(index, element) {
          if($(element).hasClass('hidden')){
            $(element).css({display: 'none'});
          }
     });
});

Я изменил отборщика также.

С уважением,

0
добавлено
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda