不能从jquery对象调用的Javascript方法

Javascript methods that can not be called from jquery objects?

本文关键字:Javascript 方法 调用 对象 jquery 不能      更新时间:2023-09-26

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

我们需要将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数组?

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版本中实现,请自己实现。