我一直在玩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选择器函数的模块?
答案 0 :(得分: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)
选择器。
答案 1 :(得分:0)
回答问题的其他部分:
导入另一个具有我需要的jquery选择器函数的模块?
无论你能做什么与cheerio,你都可以使用jsdom。它实现了完整的DOM,使您能够注入jQuery和其他库。
作为一个缺点,它会降低代码速度并占用更多内存,所以只有在没有其他选择时才能更好地使用它,例如:当你有更多的事情要做,而不是简单的html解析。