【问题标题】:Can I add more jquery selectors to cheerio? (node.js)我可以向cheerio 添加更多jquery 选择器吗? (node.js)
【发布时间】:2014-01-07 11:06:57
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery node.js cheerio


    【解决方案1】:

    你可以像这样向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) 选择器。

    【讨论】:

    • hmm,所以如果我做对了,我可以自己按顺序索引所有 ,然后从这个新索引中挑选所有奇数和偶数。这是一个好主意,但我将如何按顺序索引所有 ? (我对 javascript 还是很陌生)
    • 我刚刚意识到我可以将所有 td 元素添加到一个数组中并以这种方式计算它们 - 呵呵!感谢您的帮助!
    【解决方案2】:

    回答你问题的另一部分:

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

    无论 Cheerio 不能做什么,jsdom 都可以。它实现了完整的 DOM,并允许您注入 jQuery 和其他库。

    不利的一面是,它会减慢您的代码速度并占用更多内存,因此最好仅在没有其他选择的情况下使用它,例如:当您需要做的不仅仅是简单的 html 解析时。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签