Я играл с 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.