2015-10-04 190 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',那麼你的代碼仍然是錯誤的。 –

相關問題