无法从jquery对象调用的Javascript方法?

我正在阅读学习jQuery 1.3(Jonathan Chaffer和Karl Swedberg),在排序表时,他们在调用.sort()之前使用了.get() .sort() ,并说

我们需要将jQuery对象转换为DOM节点数组。 尽管jQuery对象在很多方面都像数组一样,但它们没有任何可用的本机数组方法,例如.sort()。

码:

 $("#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); }); });​ 

所以我尝试在不使用.get()情况下完成它,但是即使没有.get()和最新的jQuery,它也很有用,但是不能用于1.3

所以做了一些小提琴来说清楚

**不使用.get() jquery 1.2.6 **

使用.get() jquery 1.2.6

在没有.get()情况下工作jquery 1.7.2

使用.get() jquery 1.7.2

所以很明显早期的jQuery对象以前没有.sort()函数与Javascript数组相同? 但现在他们有……

所以我的问题是jQuery对象还没有支持哪些function,所以我们可以记住在使用之前转换为Javascript数组?

jQuery对象目前支持3种数组方法:

 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"] 

它们也有slice ,但它与数组的slice

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

jQuery确实有.sort方法,它没有正式记录,因为它不遵循jQuery方法的通常格式。

支持的唯一方法是api中列出的方法。

.sort实现为:

 $.fn.sort = [].sort; 

您可以根据需要以相同的方式添加自己的其他数组方法。

 $.fn.reverse = [].reverse; 

如果.sort未在您的jQuery版本中实现,请自行实现。