1

我一直在玩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选择器功能的模块?

4

2 回答 2

0

要回答您问题的另一部分:

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

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

不利的一面是,它会减慢您的代码速度并占用更多内存,因此只有在没有其他选择时才最好使用它,例如:当您除了简单的 html 解析之外还有更多工作要做时。

于 2014-07-16T15:23:58.293 回答
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)选择器。

于 2013-12-19T03:59:24.927 回答