7

我正在阅读 Learning jQuery 1.3 (Jonathan Chaffer 和 Karl Swedberg),在对表格进行排序时,他们.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 对象还不支持哪些功能,所以我们可以记住在使用之前转换为 Javascript 数组?

4

2 回答 2

4

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
于 2012-06-22T14:52:10.280 回答
1

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

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

.sort实现为:

$.fn.sort = [].sort;

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

$.fn.reverse = [].reverse;

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

于 2012-06-22T14:27:18.747 回答