无法从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版本中实现,请自行实现。