2010-01-15 25 views
18

Thực tiễn xấu/xấu nhất của JQuery bạn đã thấy, viết hoặc điều nên tránh là gì?Thực hành Jquery Bad

+1

Tôi biết tôi đã nhận xét, nhưng câu hỏi này là một bản sao chính xác: http://stackoverflow.com/questions/1229259/jquery-pitfalls-to-avoid –

Trả lời

30

Điều bạn nên tránh là sử dụng bộ chọn "dễ sử dụng" trong mỗi dòng một lần nữa, vì việc triển khai JavaScript của bộ chọn không phải là hiệu quả là. Tất nhiên, những kẻ jQUery đang tối ưu hóa nó, tuy nhiên tôi nghĩ bạn nên sử dụng nó càng ít càng tốt.

Vì vậy, đây là thực tiễn không tốt.

$("li ul span").show(); 
$("li ul span").toggleClass("bubu"); 

Chaining là tốt

$("li ul span").show().toggleClass("bubu"); 

Và nhớ mọi thứ trong một biến địa phương cũng không phải là xấu:

var allspans = $("li ul span"); 
allspans.show(); 
allspans.toggleClass("bubu"); 
+0

Vâng, rất nhiều người làm điều này. Nó rất tệ cho hiệu suất. – jerone

+0

+1 để chỉ ra chuỗi và biến cục bộ! –

2

Vẫn sử dụng tài liệu cũ chức năng sẵn sàng:

$("document").ready(function(){ }); 

Thay vì rất com mon:

$(function(){ }); 

Nó không thực sự tệ, nhưng tôi cho thấy mọi người không bắt kịp với api mới.

+13

Sử dụng '$ (tài liệu) .ready (...)' thường được sử dụng để làm cho mã rõ ràng. Tất nhiên nó là không cần thiết, nhưng nó hầu như không phải là một IMO thực hành xấu. –

+1

Đó là những gì tôi đã nói. :) – jerone

+1

bạn có thể giải thích, tại sao tôi nên làm điều đó?Tôi nghĩ, phiên bản đầu tiên có ý nghĩa hơn - chúng tôi đang gắn một trình xử lý sự kiện vào đối tượng DOCUMENT. Một trong những khác .. thậm chí tho nó có thể hoạt động tốt hơn .. không giải thích chính nó. – naivists

17

Có hai mà tôi nhìn thấy rất nhiều:

Đầu tiên, trong một sự kiện nhấp chuột, các id được truy cập như thế này:

$("a").click(function(e){ 
    var id = $(this).attr('id'); 
}); 

Điều đó tạo ra một mới đối tượng jQuery quanh DOM nút, gọi hàm. Sau đây là cách chính xác:

$("a").click(function(e){ 
    var id = this.id; 
}); 

Lưu ý: Đó là bạn cũng sẽ thấy $(this).attr('href'), nhưng điều đó là đúng vì cách jQuery bình thường hóa nó trên các trình duyệt.

Các thứ hai là đi qua bất cứ điều gì ngoại trừ một nút DOM vào scope tham số của cuộc gọi jQuery:

$(".child", $(".parent")).doSomething(); 
// or 
$(".child", ".parent").doSomething(); 

Không có đạt được tốc độ ở tất cả bằng cách làm này. Nơi bạn thấy tốc độ tăng, là khi bạn đã có phần tử DOM:

$('div').click(function(){ 
    $('img', this).doSomething(); // This is good 
}); 
5

James Padolsey đã viết an excellent article trên mùi mã jQuery. Tôi khuyên bạn nên đọc nó.

+0

thats một bài viết hay – Anurag