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

时间:2012-06-22 14:23:59

标签: javascript jquery arrays javascript-objects

我正在阅读学习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

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

**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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

.sort实现为:

$.fn.sort = [].sort;

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

$.fn.reverse = [].reverse;

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