2012-03-30 26 views
5

Các phương thức jQuery nào nên tránh để ủng hộ các phương thức/thuộc tính dựng sẵn?Khi nào nên sử dụng các phương thức trình bao bọc jQuery thay vì các phương thức javascript tích hợp

Ví dụ:

$('#el').each(function(){ 

    // this.id vs $(this).attr('id'); 
    // this.checked vs $(this).is(':checked'); 

});; 
+2

Tại sao nên tránh? Hàng nghìn giờ làm việc đã được đầu tư để đảm bảo khả năng tương thích giữa các trình duyệt. – Sparky

+0

cũng có, nhưng một số người trong số họ chỉ là hàm bao cho những thứ có nhiều khả năng không thay đổi trong javascript – Alex

+0

Tôi đoán tôi chỉ cố gắng để có được root của lý do tại sao bạn đang yêu cầu này. Bạn đang gặp vấn đề với một cái gì đó? – Sparky

Trả lời

1

Đây là một câu hỏi rộng nhưng đây là một vài hướng dẫn mà tôi nghĩ là rất hữu ích. Bạn có thể/nên sử dụng các phương thức js gốc khi:

  1. Bạn biết mình đang làm gì. Đó là bạn biết thông số kỹ thuật và bất kỳ sự mâu thuẫn nào giữa các trình duyệt.
  2. Bạn đang viết đoạn mã quan trọng về hiệu suất, nơi thuận tiện không phải là ưu tiên hàng đầu
  3. Bạn không hài lòng với cách hoạt động của chức năng thư viện. Điều này có thể phá vỡ những điều sau đây: thực hiện
    • thư viện là lỗi (điều đó xảy ra)
    • thực hiện thư viện là không đầy đủ (ví dụ như chưa hỗ trợ một số tính năng mới đó là OK để sử dụng trong trường hợp của bạn)
    • đơn giản tầm nhìn của bạn về một số tính năng khác với thực hiện thư viện của

điều kiện đầu tiên nên là đúng trong mọi trường hợp :) Những người khác có thể kết hợp hoặc đi riêng rẽ. Tôi hiểu rằng tất cả họ đều gây tranh cãi và có thể kích động các cuộc đàm phán dài về triết học nhưng tôi nghĩ rằng đó là những điểm khởi đầu tốt và tóm tắt rất nhiều trường hợp.

Nhưng dòng dưới cùng là - nếu bạn không có lý do để tránh phương pháp thư viện, hãy sử dụng chúng!

3

tôi sử dụng tài sản javascript trực tiếp như this.id trong những trường hợp:

  1. Bất cứ khi nào nó thực hiện chính xác những gì tôi muốn.
  2. Khi tốc độ là quan trọng.
  3. Khi tất cả các trình duyệt tôi quan tâm hỗ trợ chính xác những gì tôi cần.

tôi sử dụng phương pháp truy cập jQuery khi:

  1. Có những vấn đề hỗ trợ trình duyệt chéo hoặc tôi không chắc chắn rằng không có vấn đề trình duyệt chéo.
  2. Khi cách jQuery có nhiều chức năng nâng cao hữu ích trong hoàn cảnh của tôi.
  3. Khi đó là một phần của hoạt động chuỗi và chuỗi hoạt động tốt hơn với jQuery.
  4. Khi tôi đã sử dụng jQuery cho hoạt động này và có vẻ như không phù hợp để trộn/kết hợp một số truy cập trực tiếp và một số truy cập jQuery.

Ví dụ: str = $(elem).html() không thực sự có bất kỳ lợi thế hơn str = elem.innerHTML, nhưng $(elem).html(str) có một số ưu điểm so với elem.innerHTML = str; vì phương pháp jQuery sẽ dọn sạch các đối tượng đang được loại bỏ hoàn toàn hơn cách innerHTML.

+0

Trớ trêu thay 'href' là một ví dụ mà jQuery ** không ** làm điều gì đó cho bạn (trình duyệt khác nhau về việc liệu một URL tương đối trong thuộc tính' href' có đủ điều kiện hay không trong thuộc tính 'href'). Ngoài ra, các thuộc tính boolean chính xác là điều mà jQuery đã sai, hơn và hơn. * "jQuery đã khử trùng giá trị thành boolean" *: không, boolean đã tồn tại dưới dạng thuộc tính 'checked' và đã thực hiện đáng tin cậy trong tất cả các trình duyệt chính kể từ IE 4. Chỉ cần sử dụng' this.checked' (và tương tự cho tất cả các thuộc tính boolean khác). Nó là tốt hơn so với các thay thế jQuery trong mọi cách. –

+0

Xem thêm http://whattheheadsaid.com/2010/10/utilizing-the-awesome-power-of-jquery-to-access-properties-of-an-element –

+0

@TimDown - Tôi đã làm sạch các ví dụ. – jfriend00

1

Hầu hết các thuộc tính DOM đều không có sự cố trong tất cả các trình duyệt chính. Đối với hai ví dụ bạn đề cập đến (idchecked), thuộc tính DOM là 100% đáng tin cậy và nên được sử dụng tùy theo jQuery tương đương về độ tin cậy, hiệu suất và khả năng đọc.

Điều tương tự cũng xảy ra đối với tất cả thuộc tính tương ứng với thuộc tính boolean: readonly, disabled, selected là các thuộc tính phổ biến. Here are some more. className cũng là 100% rắn. Đối với các thuộc tính và thuộc tính khác, tùy thuộc vào bạn. Sử dụng một thư viện như jQuery có thể là cách tiếp cận tốt nhất cho những điều này nếu bạn không chắc chắn và có thể đủ khả năng để mất một số hiệu suất (thường là trường hợp).

Ngăn xếp tràn thường xuyên Andy Earnshaw đã viết blog về điều này: http://whattheheadsaid.com/2010/10/utilizing-the-awesome-power-of-jquery-to-access-properties-of-an-element

+0

wow hơn 20 hoạt động chỉ để có được id :) – Alex

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