【问题标题】:jQuery $().each instead of $.each()jQuery $().each 而不是 $.each()
【发布时间】:2011-07-19 22:53:50
【问题描述】:

我正在使用 jQuery 的标准创作模式编写一个插件,使用方法来做不同的事情,我遇到了 .each() 的问题。

我从文档中了解到 $.each()$(selector).each() 之间的区别,但我不知道如何解决我的问题...

在我的代码中,我有一个方法可以返回一个使用 $(selector).data() 存储的对象,我可以像这样运行 $.each() :

$.each($(selector).maps('getdetails'), function(key, value){/* stuff here */});

但是,在 jQuery 可链接性的范围内,这不是应该的,我无法理解如何做到这一点:

$(selector).maps('getdetails').each(function(key, value){/* stuff here */});

为了用户的可链接性和易用性,后者更可取。但是我总是收到以下错误:

TypeError: $(selector).maps("getdetails").each is not a function

这是变量对象中的相关方法:

getdetails: function(){
    return $(this).data('maps').details;
},

(是的,在你说之前,我知道这是不正确的 JS,但正如我所说,它在我的代码中正确地包装在变量 {} 中。)

有谁知道我如何将这个对象操作成一个 jQuery 对象,后一个 .each() 函数将对其进行迭代?

【问题讨论】:

  • $(this).data('maps').details 是一个数组吗?
  • $(this).data('maps').details 是作为键 > 值对的对象的对象。在下面@zzzzBov 的回答之后,我现在让它返回 jQuery 对象类型,但请查看我的评论,因为我仍然没有得到想要的结果。
  • 我认为你被 $.each 困住了。一个 jQuery 实例对象只能包含一个值数组,但你拥有的是一组键值对。如果你想使用.each(),你需要一个jQuery实例对象,但是它不能保存键,只能保存值。
  • 感谢您的建议。也许我需要重新审视我存储数据的方式;o)
  • 好的,所以不是存储键 > 值对,每个值现在都是一个存储在数组中的对象,并且根据此处关于 $() 包装我的问题的建议,它可以按需要工作。再次向 Stack Overflow 致敬!!!

标签: jquery loops each typeerror


【解决方案1】:

我假设details 是一个数组,这就是details.each 不起作用的原因。您需要将details 转换为jQuery.init 对象(jQueried 对象的映射),只需将其放入jQuery 函数即可:

return $( $(this).data('maps').details );

【讨论】:

  • details.each 不起作用不是因为它是一个数组,而是因为它不是一个 jQuery 实例对象。您的措辞表明,如果它不是数组,它将起作用。
  • 但是,我现在有第二个问题。 $(this).data('maps').details 是对象作为键 > 值对的对象。执行上述操作会返回一个被迭代的对象,因此只有一次迭代。我将如何返回它的孩子?
【解决方案2】:

您是否忘记了“#”或“.”分别表示 id 或 class?

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 2011-03-01
    • 2018-08-24
    • 2013-09-28
    • 2014-10-19
    • 2021-04-19
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多