2012-01-05 20 views
28

Tôi muốn ẩn tất cả các phần tử con trong div. Và sau đó hiển thị một cái cụ thể được truyền cho hàm.Jquery: Ẩn tất cả trẻ em, sau đó hiển thị một phần tử cụ thể

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

sau đó tôi gọi hàm từ một sự kiện onmouse như: subDisplay(#DivIwantToShow); Nhưng không có gì hiển thị ...

am i làm gì sai?

+3

gì được truyền trong 'name'? Nó là một đối tượng jQuery, hoặc một bộ chọn? Ngoài ra, nhìn vào mã của bạn có vẻ như bạn có nhiều hơn một 'navSub', đó là HTML bất hợp pháp - bạn chỉ có thể có một ID duy nhất trong trang - sử dụng các lớp thay thế. – Bojangles

+0

bạn có nghĩa là gọi 'subDisplay (#DivIwantToShow);'? –

+3

Bạn cần 'subDisplay ('# DivIwantToShow');' - đó là một chuỗi mà bạn vượt qua đó –

Trả lời

61

Bạn cần ẩn các con và không chứa div chứa.

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

Vì vậy, bây giờ nếu div bạn đang cố gắng để hiển thị là một yếu tố trong div mẹ nó vẫn sẽ hiển thị trong khi những người khác ở ẩn.

+0

Điều này thật tuyệt vời ... –

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

Để tóm tắt những ý kiến ​​rất lớn từ @dotweb và @ Matt;

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

subDisplay('#DivIwantToShow'); 
3

Nếu bạn đang nhắm mục tiêu trẻ em của #navSub, bạn cần nhắm mục tiêu họ và giấu họ, chứ không phải là yếu tố navSub; mà bạn có thể thực hiện bằng phương pháp children();

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

Nếu không, có vẻ như bạn có nhiều phần tử có cùng ID trong DOM của bạn, điều này không được phép.

Sau đó, bạn cần chuyển một chuỗi (một bộ chọn jQuery hợp lệ) đến subDisplay();

subDisplay('#DivIwantToShow'); 
0

nếu tên của nguyên tố này được thông qua vào sử dụng tên này:

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