【问题标题】:Javascript methods that can not be called from jquery objects?无法从 jquery 对象调用的 Javascript 方法?
【发布时间】:2012-06-24 20:45:28
【问题描述】:

我正在阅读 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() 的情况下执行此操作,但令人惊讶的是,即使没有使用最新 jQuery 的.get(),它也能正常工作,但不适用于 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 数组??

【问题讨论】:

  • 我不使用 jQuery 的另一个原因。
  • 解决最后一点:不,它不是 jQuery 对象。整体是一个包含 DOM 元素的 jQuery 对象,所以 ab(作为对象内部的单个元素)是 DOM 元素。
  • 您不应该依赖任何库中未记录的特性——它们随时可能发生变化。在这种特定情况下,只需在执行数组操作之前获取一个真正的 DOM 元素数组即可。
  • @AnthonyGrist 当我们有一些选择器返回多个元素时,它不是一个 jquery 对象数组吗??
  • @RajatSinghal 否。.get() 函数旨在为您提供对 DOM 元素本身的访问,因此返回的数组是 DOM 元素数组,而不是 jQuery 对象。

标签: javascript jquery arrays javascript-objects


【解决方案1】:

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

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

.sort 实现为:

$.fn.sort = [].sort;

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

$.fn.reverse = [].reverse;

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

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2011-10-22
      • 2015-02-12
      • 1970-01-01
      • 2016-02-11
      相关资源
      最近更新 更多