web-dev-qa-db-fra.com

Besoin d'utiliser jQuery.find pour trouver un élément avec un style spécifique

Droite ... J'ai besoin de trouver tous les éléments <ul style = "display: block;">, afin de pouvoir le définir, afficher: aucun.

Je pense que je suis sur la bonne voie ici ... mais pas tout à fait là:

jQuery('#adminMenu li').find("ul").css('display');

Pour les utilisateurs avancés: comment puis-je trouver et changer le style avec une seule ligne?

24
Steven

C'est délicat comme indiqué, mais il est résolu d'autres façons. Le plus simple est:

$("#adminMenu li ul:visible").hide();

en supposant que les éléments sont cachés ou non. Bien sûr, étant donné que vous voulez tous les cacher, pourquoi pas seulement:

$("#adminMenu li ul").hide();

Essayez d'éviter de changer directement le style CSS. C'est problématique. C'est difficile à inverser et à mesure que vous découvrez qu'il est difficile de rechercher. Utilisez plutôt une classe:

#adminMenu li ul { display: none; }
ul.block { display: block; }

avec:

$("#adminMenu li ul").removeClass("block");

ou

$("#adminMenu li ul.block").removeClass("block");
26
cletus

Vous pourrez peut-être utiliser les sélecteurs d'attributs et l'option "contient"

$('#adminMenu li ul[style*="display:block"]').hide()

Cela dit essentiellement "tout attribut de style ul who contient le texte affiché: bloc"

23
Corey Downie

Vous pouvez utiliser un filtre. ( http://api.jquery.com/filter/ )

Vous pouvez donc faire comme ci-dessous.

$('ul').filter(function() {
    return $(this).css('display') == 'block';
});
7
asankasri
$('#adminMenu li').find("ul:visible").css('display', 'none');

ou

$('#adminMenu li').find("ul:visible").hide();

ou

$('#adminMenu li ul:visible').hide();

pour citer quelques façons

0
Russ Cam

Vous pouvez utiliser les méthodes fadeOut () et slideUp () pour un effet visuel:

jQuery('#adminMenu li').find("ul").fadeOut('fast');

jQuery('#adminMenu li').find("ul").slideUp('fast');
0
Corey Ballou
$('#adminMenu li ul').hide();
0
powtac

Je ne sais pas comment le faire en une seule ligne, mais voici comment vous pouvez le faire en quelques autres:

jQuery('#adminMenu li').find("ul").each(function (){
  if($(this).css("display") == "block"){
    // do something
  }
});

Si vous voulez gérer tous les éléments visibles (au lieu de seulement le display: block ones), vous pouvez essayer le :visible sélecteur à la place.

0
Seb