2012-01-05 11 views
28

Chcę ukryć wszystkie elementy podrzędne w elemencie div. A następnie pokaż konkretny przekazany do funkcji.Jquery: Ukryj wszystkie dzieci, a następnie pokaż konkretny element.

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

Potem wywołać funkcję z onmouse imprezy jak: subDisplay(#DivIwantToShow); ale nic nie wyświetla ...

Co robię źle?

+3

Co jest przekazywana w 'name'? Czy jest to obiekt jQuery, czy selektor? Ponadto, patrząc na twój kod, wydaje się, że masz więcej niż jeden # # navSub, który jest nielegalnym HTML - możesz mieć tylko jeden unikalny identyfikator na stronie - zamiast tego używaj klas. – Bojangles

+0

dosłownie nazywasz 'subDisplay (#DivIwantToShow);'? –

+3

Potrzebujesz 'subDisplay ('# DivIwantToShow');' - to ciąg znaków, który tam podajesz –

Odpowiedz

61

Musisz ukryć dzieci, a nie zawierający div.

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

Więc teraz, jeśli div staramy się pokazać to element div będzie nadal wykazują podczas gdy inni pozostają ukryte.

+0

To jest niesamowite ... –

0
function subDisplay(name) { 
    $("#navSub").hide(); 
    $('#'+name).show(); 
} 
1

Podsumowując wielkie komentarze @dotweb i @Matt;

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

subDisplay('#DivIwantToShow'); 
3

Jeśli kierujesz dzieci #navSub, trzeba kierować je ukryć im, zamiast elementu navSub; które można wykonać za pomocą metody children();

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

W przeciwnym razie wydaje się, że w dokumencie DOM jest wiele elementów o tym samym identyfikatorze, co jest niedozwolone.

Następnie należy przekazać ciąg znaków (który jest prawidłowym selektorem jQuery) do subDisplay();

subDisplay('#DivIwantToShow'); 
0

jeśli nazwa elementu jest przekazywane w użyciu nazwy to:

if($(this).attr('name') != name){ 
    //Hide it 
    } else { 
    //show it 
}