我可以在cheerio中添加更多jquery选择器吗? (的node.js)

时间:2013-12-19 02:10:35

标签: javascript jquery node.js cheerio

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

2 个答案:

答案 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解析。