2013-12-19 153 views
0

我一直在玩cheerio,我注意到它似乎並不支持在jquery引用中指定的某些選擇器,特別是「:odd」和「:even」。有沒有辦法通過將jquery包導入我的程序來使用它們?或者是那些必須在cheerio代碼中實現的東西?我可以添加更多jQuery選擇器給cheerio嗎? (node.js)

這裏是我的代碼:

//var request = require('request'); 
var cheerio = require('cheerio'); 
var jquery = require('./jquery-1.10.2'); 

var fs = require('fs'); 

    $ = cheerio.load(fs.readFileSync('c:/java/bushkill_mls.html')); 

    var odds = []; 
    var evens = []; 

    $('tr:odd').each(function() { 
     odds = odds.concat($(this).text()); 

     }); 
     console.log(odds); 

你可以看到我試圖導入jQuery的,但我不能讓過去導入它沒有得到錯誤「窗口沒有被定義」所以顯然這似乎是一個節點的兼容性問題。那麼有沒有辦法增加cheerio中的選擇器庫,或者可能導入另一個具有我需要的jquery選擇器功能的模塊?

回答

0

您可以添加一些簡單的cheerio這樣的:

var cheerio = require('cheerio'); 

cheerio.prototype.odd = function() { 
    var odds = []; 
    this.each(function(index, item) { 
     if (index % 2 == 1) { 
      odds.push(item); 
     } 
    }); 

    return cheerio(odds); 
} 

var $ = cheerio.load("<div>0</div><div>1</div><div>2</div><div>3</div><div>4</div>"); 
$("div").odd().each(function() { 
    console.log($(this).text()); 
}); 

是的,它不完全匹配的jQuery,但它類似於如何cheerio涉及jQuery的:eq(n)選擇。

+0

嗯,所以如果我得到這個權利,我可以索引所有的​​我自己的順序,然後從這個新的索引中挑選所有的奇數和偶數。這是一個好主意,但我如何索引所有​​的順序? (我對javascript依然很陌生) –

+0

我剛剛意識到我可以將所有td元素添加到數組中,並以這種方式對它們進行計數 - 噢!感謝幫助的人! –

0

要回答你的問題的另一部分:

進口具有jQuery選擇功能,我需要另一個模塊?

無論你不能用cheerio做什麼,你可以用jsdom做。它實現了完整的DOM,使您能夠注入jQuery和其他庫。

作爲一個缺點,它會減慢你的代碼並佔用更多的內存,所以它最好只在沒有其他選擇的情況下使用,例如:當你有更多的事情比簡單的HTML解析。

相關問題