簡體   English   中英

我可以在cheerio中添加更多jquery選擇器嗎? (的node.js)

[英]Can I add more jquery selectors to cheerio? (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("<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)選擇器相似。

要回答您問題的另一部分:

導入另一個模塊,該模塊具有我需要的jquery選擇器功能?

無論您使用cheerio無法做什么,都可以使用jsdom來完成 它實現了完整的DOM,並使您能夠注入jQuery和其他庫。

缺點是,它會減慢代碼速度並占用更多內存,因此,只有在沒有其他選擇的情況下,才最好使用它,例如:比起簡單的html解析還有更多事情要做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM