2015-10-04 132 views
1

这是我的代码部分:cheerio.filter()?这段代码没有运行的原因是什么?

request(main_url, function(error, response, html) {      // two parameters: an URL and a callback 
      if(!error) { 
       var $ = cheerio.load(html); 
       console.log("begin"); 
       $('.test').filter(function() { 
            console.log("in"); 
       }); 
       console.log("end"); 

      } 
    }); 

控制台显示: 开始 结束

这是很奇怪的,我做了一个测试,以检查它的类的对象是否是测试存在或不,结果是它存在。

所以我不知道为什么它将第4行直接传递到第8行?

+0

“我做了一个测试,以检查是否的对象,它的类是测试存在与否”,怎么样? – undefined

+0

@Vohuman if($('。test')){do something} –

+1

由于$('。test')'返回_object_,_object_在JavaScript中被认为是_truthy_值,你应该检查对象的'.length'属性。还要注意它不会“直接将第4行传递给第8行”。该集合似乎是空的,'.filter'回调没有执行! – undefined

回答

0

问题是request以二进制形式返回响应Buffer,而不是解码String

您需要首先转换html成字符串传递到cheerio前使用toString

var $ = cheerio.load(html.toString()); 
+1

我不认为这是问题,因为我试图在其他地方使用它,这是我收集的问题是空的,所以回调并不兴奋。但我非常感谢你的帮助,谢谢! –

+0

即使您的集合* did *包含'.test',您的回调仍然不会执行,直到您使用'toString',如上所述。 –

+0

或者至少在我的设置中,我需要对您的代码进行更改以使其工作。你的可能会有所不同,但如果你不使用'toString',那么你的代码仍然是错误的。 –

相关问题