web-dev-qa-db-fra.com

Jquery: Masquer tous les enfants, puis afficher un élément spécifique

Je veux masquer tous les éléments enfants dans un div. Ensuite, montrez-en une spécifique transmise à la fonction.

function subDisplay(name) {
   $("#navSub").each(function() {
      $(this).hide();
   });
   $(name).show();
}

alors j'appelle la fonction à partir d'un événement onmouse comme: subDisplay(#DivIwantToShow); Mais rien ne s'affiche ...

Qu'est-ce que je fais mal?

35
Christian Bekker

Vous devez masquer les enfants et non le div contenant.

$("#navSub").children().hide();

Alors maintenant, si le div que vous essayez de montrer est un élément du div parent, il apparaîtra quand les autres resteront cachés.

77
Brandon Kindred

Si vous ciblez les enfants de #navSub, Vous devez les cibler et les masquer , plutôt que l'élément navSub; ce que vous pouvez faire en utilisant la méthode children() ;

function subDisplay(name) {
    $('#navSub').children().hide();
    $(name).show();
};

Sinon, il semble que vous ayez plusieurs éléments avec le même ID dans votre DOM, ce qui n'est pas autorisé.

Vous devez ensuite passer une chaîne (qui est un sélecteur jQuery valide) à subDisplay();

subDisplay('#DivIwantToShow');
3
Matt

Pour résumer les excellents commentaires de @dotweb et @Matt;

function subDisplay(name) {
   $('#navSub').hide();
   $(name).show();
}

subDisplay('#DivIwantToShow');
1
Stefan

si le nom de l'élément est passé dans name, utilisez ceci:

    if($(this).attr('name') != name){
    //Hide it
    } else {
   //show it
}
1
Teun Pronk
function subDisplay(name) {
   $("#navSub").hide();
   $('#'+name).show();
}
0
kaz

Essayez de l'avoir en dehors de la boucle, comme ceci:

function subDisplay(name) {

     $("#navSub").hide();

     $(name).show();
}

http://jsfiddle.net/peduarte/m2pj8/

0
peduarte