2012-06-22 34 views
7

Tôi đã đọc Learning jQuery 1.3 (Jonathan sự trả giá và Karl Swedberg) và trong khi sắp xếp bảng, họ đã sử dụng trước khi gọi .get().sort(), và nóiCác phương thức Javascript không thể được gọi từ các đối tượng jquery?

chúng ta cần phải chuyển đổi các đối tượng jQuery vào mảng các nút DOM. Mặc dù các đối tượng jQuery hoạt động giống như các mảng trong nhiều khía cạnh, chúng không có bất kỳ phương thức mảng gốc nào có sẵn, chẳng hạn như .sort().

Code:

$("#sort").click(function() { 
     var posts = $("#posts_div .post"); 
     posts.sort(function(a, b) { 
      return ($(a).text()) > ($(b).text()); 
     });  
     $.each(posts, function(index, post) { $("#posts_div").append(post); }); 
});​ 

Vì vậy, tôi đã cố gắng để làm điều đó mà không sử dụng .get(), nhưng ngạc nhiên nó làm việc ngay cả khi không .get() với mới nhất jQuery, nhưng đã không làm việc với 1,3

Vì vậy, làm một số câu đố để làm rõ nó

**Not working without .get() jquery 1.2.6 **

Working with .get() jquery 1.2.6

Working without .get() jquery 1.7.2

Working with .get() jquery 1.7.2

Vì vậy, rõ ràng là trước đó đối tượng jQuery không sử dụng để có .sort() chức năng tương tự như mảng javascript? Nhưng bây giờ họ có ..

Vì vậy, câu hỏi của tôi là các chức năng mà đối tượng jQuery chưa hỗ trợ, vì vậy chúng tôi có thể ghi nhớ để chuyển đổi sang mảng Javascript, trước khi sử dụng ??

+2

Và một lý do khác tôi không sử dụng jQuery. –

+0

Để giải quyết điểm cuối cùng: Không, nó không phải là một đối tượng jQuery. Điều tổng thể là một đối tượng jQuery chứa các phần tử DOM, vì vậy 'a' và' b' (là các phần tử riêng lẻ bên trong đối tượng) là các phần tử DOM. –

+1

Bạn không nên dựa vào các tính năng không có giấy tờ của bất kỳ thư viện nào - chúng có thể thay đổi bất kỳ lúc nào.Trong trường hợp cụ thể này, chỉ cần tiếp tục và nhận được một mảng các phần tử DOM thực sự trước khi thực hiện các hoạt động mảng. –

Trả lời

4

đối tượng jQuery hiện hỗ trợ 3 phương pháp mảng:

var methods = 'pop push reverse shift sort splice unshift concat join slice toString indexOf lastIndexOf filter forEach every map some reduce reduceRight'.split(' ') 
var implemented = $.grep(methods, function(m) { 
    return $.prototype[m] == Array.prototype[m]; 
}); 
console.log(implemented); // => ["push", "sort", "splice"] 

Họ cũng có slice, nhưng nó không giống slice như mảng có:

$.prototype.slice === Array.prototype.slice // => false 
1

jQuery có phương thức .sort, nó không phải là tài liệu chính thức vì nó không tuân theo định dạng bình thường của các phương thức jQuery.

Các phương pháp duy nhất được hỗ trợ là những phương pháp được liệt kê trong api.

.sort được thực hiện như:

$.fn.sort = [].sort; 

Bạn có thể thêm các phương pháp mảng thêm của riêng bạn khi cần thiết trong cùng một cách.

$.fn.reverse = [].reverse; 

Nếu .sort không được triển khai trong phiên bản jQuery của bạn, hãy tự thực hiện.

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