2012-01-05 3 views
28

Я хочу скрыть все дочерние элементы в div. Затем укажите конкретную функцию, переданную функции.JQuery: Скрыть всех детей, затем показать определенный элемент

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

затем я вызвать функцию из onmouse события, как: subDisplay(#DivIwantToShow); Но ничего не отображает ...

Что я делаю неправильно?

+3

Что передается в 'name'? Это объект jQuery или селектор? Кроме того, глядя на ваш код, кажется, что у вас есть несколько «# navSub», что является незаконным HTML - на странице может быть только один уникальный идентификатор - вместо этого используйте классы. – Bojangles

+0

вы буквально называете 'subDisplay (#DivIwantToShow);'? –

+3

Вам нужно 'subDisplay ('# DivIwantToShow');' - это строка, которую вы передаете –

ответ

61

Вам нужно спрятать детей, а не содержащие div.

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

Так что теперь, если DIV вы пытаетесь показать элемент в родительском DIV он все равно будет показывать в то время как другие остаются скрытыми.

+0

Это потрясающе ... –

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

Суммируя большие комментарии от @dotweb и @ Matt;

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

subDisplay('#DivIwantToShow'); 
3

Если вы ориентируетесь детей #navSub, необходимо нацелить их и скрыть им, а не элемент navSub; которые вы можете сделать, используя метод children();

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

В противном случае, похоже, что у вас есть несколько элементов с одинаковым идентификатором в DOM, что недопустимо.

Затем вам необходимо передать строку (которая является допустимым селектором jQuery) до subDisplay();

subDisplay('#DivIwantToShow'); 
0

если имя элемента передается используется имя этого:

if($(this).attr('name') != name){ 
    //Hide it 
    } else { 
    //show it 
} 
Смежные вопросы