2009-10-13 17 views
17

Phải ... Tôi cần tìm tất cả các phần tử kiểu < ul style = "display: block;"> để tôi có thể đặt hiển thị: none.Cần sử dụng jQuery.find để tìm phần tử có kiểu dáng cụ thể

Tôi nghĩ rằng tôi đang trên con đường đúng đắn ở đây ... nhưng không hoàn toàn có:

jQuery('#adminMenu li').find("ul").css('display'); 

Đối với người dùng trước: làm thế nào tôi có thể tìm và thay đổi phong cách với một dòng?

Trả lời

24

Đó là khó khăn như đã nêu nhưng là có thể giải quyết những cách khác. Cách dễ nhất là:

$("#adminMenu li ul:visible").hide(); 

các mục giả định là ẩn hoặc không. Tất nhiên, xem xét bạn muốn ẩn chúng tất cả tại sao không chỉ:

$("#adminMenu li ul").hide(); 

Hãy thử và tránh thay đổi kiểu CSS trực tiếp. Đó là vấn đề. Thật khó để đảo ngược và khi bạn phát hiện ra khó tìm kiếm. Sử dụng một lớp thay vì:

#adminMenu li ul { display: none; } 
ul.block { display: block; } 

với:

$("#adminMenu li ul").removeClass("block"); 

hoặc

$("#adminMenu li ul.block").removeClass("block"); 
0
$('#adminMenu li').find("ul:visible").css('display', 'none'); 

hoặc

$('#adminMenu li').find("ul:visible").hide(); 

hoặc

$('#adminMenu li ul:visible').hide(); 

đến tên một vài cách

0

Bạn coud sử dụng fadeOut() hoặc slideUp() phương pháp cho một hiệu ứng hình ảnh:

jQuery('#adminMenu li').find("ul").fadeOut('fast'); 

jQuery('#adminMenu li').find("ul").slideUp('fast'); 
0
$('#adminMenu li ul').hide(); 
+0

bạn có báo giá sai ở cuối;) –

+0

Cảm ơn, nhưng tôi nghĩ rằng tôi có câu trả lời sai, nó là nhiều hơn: http: // stackoverflow.com/questions/1562634/cần-để-sử dụng-jquery-tìm-để-tìm-yếu tố-với-cụ thể-phong cách/1562680 # 1562680 – powtac

0

Không biết làm thế nào để làm điều đó trong một dòng, nhưng đây là cách bạn có thể làm điều đó trong một vài chi tiết:

jQuery('#adminMenu li').find("ul").each(function(){ 
    if($(this).css("display") == "block"){ 
    // do something 
    } 
}); 

Nếu những gì bạn muốn là để xử lý tất cả các yếu tố có thể nhìn thấy (thay vì chỉ display: block người), bạn có thể thử bộ chọn :visible để thay thế.

19

Bạn có thể sử dụng bộ chọn thuộc tính, và 'chứa' tùy chọn

$('#adminMenu li ul[style*="display:block"]').hide() 

này chủ yếu nói 'bất kỳ ul người là thuộc tính style chứa màn hình hiển thị văn bản: block'

+0

Đối với tôi (trong jQuery-1.9.0), điều này cho biết 'Lỗi cú pháp, biểu thức không được công nhận : ul [style * = display: block] ' –

+0

Đã chỉnh sửa để bao gồm các dấu ngoặc còn thiếu –

+1

Đây là ý tưởng hay khi sử dụng bộ chọn ký tự đại diện đó. Tôi tự hỏi nếu nó nhanh hơn so với các đề xuất khác. OP: bạn có thể muốn xem xét một mục tiêu rộng hơn mặc dù. Ví dụ, nếu có, vì lý do gì đó, một không gian hoàn toàn hợp lệ giữa 'display: block' sẽ không hoạt động. Nhưng điều này sẽ '[style * =" block "]' giả định nó không quá rộng cho mục đích của bạn. – dhaupin

1

Bạn có thể sử dụng bộ lọc. (http://api.jquery.com/filter/)

Vì vậy, bạn có thể làm như sau.

$('ul').filter(function() { 
    return $(this).css('display') == 'block'; 
}); 
Các vấn đề liên quan