[英]Can I add more jquery selectors to cheerio? (node.js)
我一直在使用cheerio,我注意到它似乎不支持jquery參考中指定的某些選擇器,特別是“:odd”和“:even”。 有沒有辦法通過將jquery包導入我的程序來使用它們? 還是在cheerio代碼中必須實現的東西?
這是我的代碼:
//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選擇器功能的另一個模塊?
您可以添加一些簡單的東西給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)
選擇器相似。
要回答您問題的另一部分:
導入另一個模塊,該模塊具有我需要的jquery選擇器功能?
無論您使用cheerio無法做什么,都可以使用jsdom來完成 。 它實現了完整的DOM,並使您能夠注入jQuery和其他庫。
缺點是,它會減慢代碼速度並占用更多內存,因此,只有在沒有其他選擇的情況下,才最好使用它,例如:比起簡單的html解析還有更多事情要做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.