Javascript cheerio.filter()?这段代码之所以会';我跑不了?
这是我代码的一部分:Javascript cheerio.filter()?这段代码之所以会';我跑不了?,javascript,node.js,cheerio,Javascript,Node.js,Cheerio,这是我代码的一部分: request(main_url, function(error, response, html) { // two parameters: an URL and a callback if(!error) { var $ = cheerio.load(html); console.log("begin"); $(
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");
}
});
控制台显示:
开始
结束
这真的很奇怪,我做了一个测试来检查类为test的对象是否存在,结果是它存在
所以我不知道为什么它会将第4行直接传递到第8行?问题是
请求
将响应作为二进制缓冲区
返回,而不是解码的字符串
您需要先将html
转换为字符串,然后使用toString
将其传递给cheerio:
var $ = cheerio.load(html.toString());
问题是
请求
将响应作为二进制缓冲区
返回,而不是解码的字符串
您需要先将html
转换为字符串,然后使用toString
将其传递给cheerio:
var $ = cheerio.load(html.toString());
“我做了一个测试来检查类为test的对象是否存在”,how?@Vohuman if($('.test'){do something}这总是正确的,因为
$('.test')
返回一个对象,并且在JavaScript中对象被认为是真实值。您应该检查对象的.length
属性。还请注意,它不会“将第4行直接传递到第8行”。集合似乎为空,并且未执行.filter
回调@哦,我的上帝,谢谢你,我学到了一个新东西,我总是想如果($('.test'))是正确的几个月!!我很抱歉,因为我是javascript新手。谢谢你的帮助@是的,回拨,天哪,我也忽略了这一点。谢谢你对我的耐心,新生!“我做了一个测试来检查类为test的对象是否存在”,how?@Vohuman if($('.test'){do something}这总是正确的,因为$('.test')
返回一个对象,并且在JavaScript中对象被认为是真实值。您应该检查对象的.length
属性。还请注意,它不会“将第4行直接传递到第8行”。集合似乎为空,并且未执行.filter
回调@哦,我的上帝,谢谢你,我学到了一个新东西,我总是想如果($('.test'))是正确的几个月!!我很抱歉,因为我是javascript新手。谢谢你的帮助@是的,回拨,天哪,我也忽略了这一点。谢谢你对我的耐心,新生!我不认为这是个问题,因为我试图在其他地方使用它,这是我的集合为空的问题,所以回调并不激动。但我真的很感谢你的帮助,谢谢你!即使您的集合中确实包含.test
,您的回调仍不会执行,除非您使用此处提到的toString
。或者至少在我的设置中,我需要进行此更改才能使您的代码正常工作。您的可能不同,但如果您不使用toString
,代码中仍然存在错误。我不认为这是个问题,因为我尝试在其他地方使用它,这是我的集合为空的问题,因此回调并不兴奋。但我真的很感谢你的帮助,谢谢你!即使您的集合中确实包含.test
,您的回调仍不会执行,除非您使用此处提到的toString
。或者至少在我的设置中,我需要进行此更改才能使您的代码正常工作。您的可能会有所不同,但如果不使用toString
,代码中仍然存在错误。