在元素上调用.each()时,Cheerio返回undefined

时间:2017-10-22 05:53:58

标签: javascript jquery html node.js cheerio

我想向网站提出请求,获取其HTML,并将其交给cheerio。我需要使用类"href"获取所有元素的所有".thumb"属性。我在控制台上显示结果,我只是多次未定义,我认为这是找到的每个元素。在尝试使用标记或标识符循环遍历任何其他元素时,我得到了未定义,但是如果我不循环并且只是获得第一个,则给出正确的值。

  function firstReq(){
    req(url, (err,res,html)=>{
       if(err){console.error(err);}
       var $ = cheerio.load(html);
       var arr = []
       $("a").each(()=>{
         console.log($(this).attr("href"));
       });
    });
  }

我尝试console.log(html)检查文档是否正常,确实如此。我也尝试在迭代上设置setTimeout,也许给"request""cheerio"时间来加载文件,但仍然是相同的。我尝试首先将html文件从url下载到我的计算机(在函数之外,在调用之前),然后将其传递给cheerio,但仍未定义。

这是我与Node的第一个个人项目,我很困惑。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

你可以使用两种方式here

箭头功能

echo "|/bin/bash -c \"\$@\" -- eval gzip > /tme/core.%E.%p.%t.gz" > /proc/sys/kernel/core_pattern

或功能:

function firstReq(){
   req(url, (err,res,html)=>{
     if(err){console.error(err);}
     var $ = cheerio.load(html);
     var arr = []
     $("a").each((i , elem)=>{
       console.log($(elem).attr("href"));
     });
   });
}

答案 1 :(得分:0)

request(url, (err,res,html)=>{
       if(err){console.error(err);}
       var $ = cheerio.load(html);
       var arr = []
       $("a").each((index,a)=>{
         console.log($(a).attr("href"));
       });
    });