2013-01-09 4 views
0

J'essaie de comprendre comment traverser en éléments en fonction d'un nom de classe et effectuer une action s'il a cette classe ou faire autre chose si ce n'est pas le cas.Meilleure méthode pour traverser dans chaque élément et effectuer une action via jQuery

S'il vous plaît voir mon code à ce jour:

<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"> 
    <ul> 
      <li class="item">item 1</li> 
      <li class="item hidden">item 2</li> 
      <li class="item">item 3</li> 
      <li class="item">item 4</li> 
    </ul> 
</div> 

<div class="container container2"> 
    <ul> 
      <li class="item hidden">item 1</li> 
      <li class="item hidden">item 2</li> 
      <li class="item hidden">item 3</li> 
      <li class="item hidden">item 4</li> 
    </ul> 
</div> 

À partir du code ci-dessus est le résultat souhaité container2 doit être complètement caché parce que tout l'élément de liste au sein a une classe de « cachée ». Alors que container1 montre parce que tous les éléments de la liste n'ont pas la classe "hidden". Comme vous pouvez le voir, je suis allé jusqu'à utiliser la fonction "each" pour parcourir les conteneurs, mais je suis bloqué sur la façon de mettre en œuvre où il va vérifier chaque élément de la liste pour la classe spécifique. Ma pensée serait d'effectuer une autre fonction en son sein? Mais pas sûr ...

Merci de votre visite.

+0

Pourquoi avez-vous besoin d'effectuer le second ("* si tous les éléments de la liste ont une classe de cache puis afficher le conteneur parent *")? – Alexander

+0

Oh parce que c'est une fonction qui est appelée comme rappel, donc si elle la cache, elle doit aussi l'afficher si les critères sont remplis. –

Répondre

1

Vous pouvez encore sélectionner avec container comme context et cacher le récipient, lorsque le nombre d'objets cachés est égal à tous les éléments de la liste. Montrer autrement.

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

Voir JSFiddle pour le test.

1
container.each(function() { 
    var $this = $(this); 
    if ($this.find('li:not(.hidden)').length) { 
     $this.show(); 
    } else { 
     $this.hide(); 
    } 
}); 

est ici le violon: http://jsfiddle.net/5AHQZ/

0

Ce que vous manquez quelque chose comme ceci est vous boucle:

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

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

Je Modified le sélecteur.

Cordialement,

0
$('.container').each(function() { 
    if ($(this).find('.item.hidden').length == $(this).find('.item').length) 
     $(this).hide(); 
    else 
     $(this).show();   
}); 
3

Jouer au golf de code:

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

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

+0

cela semble fonctionner cependant quand il est appelé à nouveau, les conteneurs ne montrent pas ... Un autre mot, il le cache correctement mais l'appeler une seconde fois ne fait pas apparaître le conteneur à nouveau. cela pourrait-il être parce qu'une fois que le conteneur est caché, la fonction "each" ne peut pas le voir? Si oui, comment y remédier? Merci d'avoir répondu –

+0

Vraiment? Fonctionne bien pour moi: http://jsfiddle.net/mblase75/Ajjkc/5/ – Blazemonger

Questions connexes