我可以在cheerio中添加更多jquery选择器吗? (的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("
0
1
2
3
4
"); $("div").odd().each(function() { console.log($(this).text()); });

是的,它与jquery完全不匹配,但它类似于cheerio如何处理jquery的:eq(n)选择器。

要回答你问题的其他部分:

导入另一个具有我需要的jquery选择器函数的模块?

无论你不能用cheerio做什么,你都可以用jsdom做。 它实现了完整的DOM,使您能够注入jQuery和其他库。

作为一个缺点,它会降低你的代码并减少更多的内存,所以最好只在没有其他选择的情况下使用它,例如:当你有比简单的html解析更多的东西时。