JQuery: masquer tous les enfants, puis afficher un élément spécifique

Je veux cacher tous les éléments enfants dans un div. Et puis montrer un spécifique transmis à la fonction.

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

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

Ce que je fais mal?

32
demandé sur ManseUK 2012-01-05 18:47:40

6 réponses

Vous devez cacher les enfants et non le div contenant.

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

Alors maintenant, si le div que vous essayez de montrer est un élément dans le div parent, il affichera toujours pendant que les autres restent cachés.

70
répondu Brandon Kindred 2012-01-05 14:57:04

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

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
répondu Matt 2012-01-05 14:52:54

, Pour résumer les grands commentaires de @dotweb et @Mat;

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

subDisplay('#DivIwantToShow');
1
répondu Stefan 2012-01-05 14:52:53

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

    if($(this).attr('name') != name){
    //Hide it
    } else {
   //show it
}
1
répondu Teun Pronk 2012-01-05 14:56:33
function subDisplay(name) {
   $("#navSub").hide();
   $('#'+name).show();
}
0
répondu kaz 2012-01-05 14:51:58

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

function subDisplay(name) {

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

     $(name).show();
}

Http://jsfiddle.net/peduarte/m2pj8/

0
répondu peduarte 2012-01-05 14:52:16