【问题标题】:Calling .each on one element在一个元素上调用 .each
【发布时间】:2013-03-11 18:03:54
【问题描述】:

我正在使用node.io 来抓取网站。目前我正在通过the scraping tutorial

我将each 与选择器一起使用

$('selector').each( ... , function () { ... } );

However when the selector selects only one element, I am receiving this problem:

TypeError: Object #<Object> has no method 'each'

这可能是什么原因,我该如何缓解这个问题

【问题讨论】:

  • 什么?你想做什么?为什么你在 node.js 中有查询选择器?这个问题真的不清楚……
  • 不,一个元素没有这个问题,普通的 JS 元素有这个问题,你应该使用只包含实际 DOM 元素的 jQuery 对象,不管有多少元素 -> @ 987654322@.
  • @BenjaminGruenbaum 我用node.io for scraping,你可以在例子3中看到这个
  • 什么是'selector'?你能提供一个你正在使用的实际示例值吗?
  • jQuery.each() 只能在 jQuery 对象上调用。您看到的错误消息表明您正在将 .each() 绑定在 jQuery 对象之外的东西上。查看您的链接后,我对您要执行的操作感到困惑。该链接表明$ 在此上下文中 NOT 代表 jQuery。所以...我认为我们都很困惑(因为看起来您正试图将 $ 视为 WAS jQuery)。

标签: javascript node.js each node.io


【解决方案1】:

查看node.io 的源代码后,它似乎默认使用node-soupselect 而不是jQuery。

尝试设置:

this.options.expand_single_selected = false;

在你的工作的运行方法中。或者,当您创建作业时,设置它

new nodeio.Job({timeout:10,expand_single_selected:false}, methods);

这由these lines in the code, 检查,它将强制执行正确的行为。

来自node.io的创建者chriso

说实话,这是我的设计失败。每次我想要一个集合中只有一个项目的单个元素时,我都厌倦了键入 first(),所以我添加了这个快捷方式 - 我知道它会在某个阶段回来咬我!

请参阅this project issue,了解如何将其更改为使用jQuery,这将解决您的问题,以及坚持使用soupselect 的变通方法和好处。


根据您的链接,当您使用 $ 时,您不是在使用 jQuery,而是在使用 node-soupselect

它没有.each 方法。

改为使用

$('selector').forEach

哪个是原生JS函数

【讨论】:

  • @GNi33 是的,我也注意到了!也许他们在那个例子中使用了cheerio?如果你在这里检查 soupselect github.com/harryf/node-soupselect/blob/master/lib/soupselect.js 它似乎没有 .each 方法
  • node.io 似乎提供了一个与 jQuery API 类似的对象:github.com/chriso/node.io/wiki/…。也许他只是没有将正确的对象传递给函数?这个问题没有提供足够的洞察力
  • @GNi33 我最有根据的猜测是他在 node.js 中进行抓取,他们提供了 jQuery soupselect、soupselect 用于 node 和 jQuery 用于浏览器。我会调查更多
  • @BenjaminGruenbaum 如果我还有两个以上的元素 each 工作正常。
  • @BenjaminGruenbaum console.log($.fn.jquery) 的输出:TypeError: Cannot read property 'jquery' of undefined at null.&lt;anonymous&gt; (/Users/...)
【解决方案2】:

如果将单个元素放在 [brackets] 中,它将充当单个项目数组并摆脱此问题

【讨论】:

    猜你喜欢
    • 2018-04-02
    • 2016-08-18
    • 1970-01-01
    • 2012-06-12
    • 2020-08-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 2012-03-11
    相关资源
    最近更新 更多