Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript cheerio.filter()?这段代码之所以会';我跑不了?_Javascript_Node.js_Cheerio - Fatal编程技术网

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
,代码中仍然存在错误。