2011-08-21 26 views
32

Tôi đã quen với Prototypejs, trong đó $$ ("selector") sẽ trả về null nếu không tìm thấy phần tử nào. Điều này thuận tiện vì tôi có thể làmKiểm tra xem bộ chọn jQuery không tìm thấy kết quả nào

if ($$("selector")) {} 

để kiểm tra xem một phần tử có nằm trong DOM hay không.

Tuy nhiên, trong jQuery $ (selector) sẽ trở lại [] nếu không có yếu tố được tìm thấy, vì vậy bây giờ tôi cần phải làm:

if ($(selector).length > 0) 

Điều này làm cho mã hơi khó đọc.

Câu hỏi của tôi: Cách tốt nhất để làm điều này là gì? Tôi có nên mở rộng đối tượng jQuery với các phương thức như .empty() và .any(), hoặc có sẵn các hàm để làm điều này không?

Cập nhật: Điều này cũng áp dụng đối với bộ chọn khác trên jQuery mà nên, dù sao, chỉ trả lại một kết quả (như cha mẹ(), hoặc gần nhất())

+6

Bạn chỉ cần làm 'if ($ (selector) .length)' vì nó có vẻ các '0' được falsey ... –

+4

thoát khỏi ' > 0' vị ngữ. Nó là thừa. – adarshr

Trả lời

32
$.fn.exists = function() { 
    return this.length !== 0; 
} 

Được sử dụng như:

$("#notAnElement").exists(); 
+3

idk nếu nó nhanh hơn hoặc nếu nó quan trọng, nhưng bạn có thể sử dụng '$ .fn.exists = function() {return !! this [0]; } 'quá –

14

Sử dụng length là cách tốt nhất. Bạn không nên sử dụng empty() hoặc size() > 0 vì điều đó chỉ thêm mục nhập khác vào ngăn xếp cuộc gọi.

+6

Sử dụng if ($ (select) .length) hoạt động khá tốt, tôi quên rằng tôi có thể bỏ qua> 0! – micho

11
if ($(selector)[0]) 

Điều đó sẽ thực hiện.

+2

+1 Ngắn và nhanh! – user113716

+0

ty, @patrick :) –

Các vấn đề liên quan