У меня возникли проблемы с использованием селекторов, доступных для Cheerio.js, который я использую на своем сервере Node. Ядро предположительно основано на jQuery, однако я не могу заставить его работать, используя тот же выбор, что и при использовании собственного jQuery.
У меня есть DOM, который выглядит примерно так:
few cells here
These are the rows I want
Поскольку на странице есть две таблицы с классом «листинг», я не могу выбрать их напрямую, поэтому мне нужна ссылка на div с классом «тест». Выбор, который я могу выполнить с помощью jQuery, будет примерно таким:
$('div.test tbody tr')
Но это не работает с Cheerio. Если я запускаю $('div[class="test"] tr'), я получаю все строки в таблице, даже строки заголовка, так что у меня это не работает.
Есть предположения?
Обновление:
Это фактический код, который я выполняю (не работает):
// Load the html
var $ = cheerio.load(html, {
normalizeWhitespace: true
});
$('div.tillgodo tbody tr').each(function(){
console.log("Found credited course...");
var children = $(this).children();
var credits = parseFloat($(children[3]).text().replace(',', '.')); // We need to replace comma with a dot since parseFloats only supports dots by design
var row = {
"course" : $(children[1]).text().trim(),
"grade" : null,
"credits" : credits,
"date" : $(children[4]).text()
};
// Push course to JSON object
console.log("Push course to object...");
console.log("------------------------------------------\n");
data.credited_courses.push(row);
data.credited_courses_credits += parseFloat(credits);
});
Следующий код работает для первой таблицы:
$('tr.incomplete.course').each(function(i, tr){
console.log("This is course nr: " + parseInt(course_count+1));
console.log("Found incompleted course...");
var children = $(this).children();
var credits = parseFloat($(children[2]).text().replace(',', '.').match(/(\+|-)?((\d+(\.\d+)?)|(\.\d+))/)[0]); // Filter out any parentheses and odd characters
var row = {
"course" : $(children[1]).text(),
"grade" : $(children[3]).text(),
"credits" : credits,
"date" : $(children[5]).text()
};
// Sum the total amount of credits for all courses
console.log("Add credits to incompleted_credits...");
data.incompleted_credits += credits;
console.log("Push course to object...");
data.incompleted_courses.push(row);
course_count++;
});
Когда я говорю, что это не работает, это означает, что возвращаемый мной объект JSON не содержит ожидаемых строк из второй таблицы.
Обновление 2
Таблица, которую я хочу очистить:
Tillgodoräknanden
Kurskod
Kursnamn
Beslutsfattare
Poäng
Datum
Summa tillgodoräknade poäng:
10,5
Valfria kurser
xxx
10,5
2013-06-03
Подробнее здесь: https://stackoverflow.com/questions/283 ... cheerio-js
Перебор TR в таблице с помощью Cheerio.js ⇐ Jquery
Программирование на jquery
1772089340
Anonymous
У меня возникли проблемы с использованием селекторов, доступных для Cheerio.js, который я использую на своем сервере Node. Ядро предположительно основано на jQuery, однако я не могу заставить его работать, используя тот же выбор, что и при использовании собственного jQuery.
У меня есть DOM, который выглядит примерно так:
few cells here
These are the rows I want
Поскольку на странице есть две таблицы с классом «листинг», я не могу выбрать их напрямую, поэтому мне нужна ссылка на div с классом «тест». Выбор, который я могу выполнить с помощью jQuery, будет примерно таким:
$('div.test tbody tr')
Но это не работает с Cheerio. Если я запускаю $('div[class="test"] tr'), я получаю все строки в таблице, даже строки заголовка, так что у меня это не работает.
Есть предположения?
[b]Обновление:[/b]
Это фактический код, который я выполняю (не работает):
// Load the html
var $ = cheerio.load(html, {
normalizeWhitespace: true
});
$('div.tillgodo tbody tr').each(function(){
console.log("Found credited course...");
var children = $(this).children();
var credits = parseFloat($(children[3]).text().replace(',', '.')); // We need to replace comma with a dot since parseFloats only supports dots by design
var row = {
"course" : $(children[1]).text().trim(),
"grade" : null,
"credits" : credits,
"date" : $(children[4]).text()
};
// Push course to JSON object
console.log("Push course to object...");
console.log("------------------------------------------\n");
data.credited_courses.push(row);
data.credited_courses_credits += parseFloat(credits);
});
Следующий код работает для [b]первой[/b] таблицы:
$('tr.incomplete.course').each(function(i, tr){
console.log("This is course nr: " + parseInt(course_count+1));
console.log("Found incompleted course...");
var children = $(this).children();
var credits = parseFloat($(children[2]).text().replace(',', '.').match(/(\+|-)?((\d+(\.\d+)?)|(\.\d+))/)[0]); // Filter out any parentheses and odd characters
var row = {
"course" : $(children[1]).text(),
"grade" : $(children[3]).text(),
"credits" : credits,
"date" : $(children[5]).text()
};
// Sum the total amount of credits for all courses
console.log("Add credits to incompleted_credits...");
data.incompleted_credits += credits;
console.log("Push course to object...");
data.incompleted_courses.push(row);
course_count++;
});
Когда я говорю, что это не работает, это означает, что возвращаемый мной объект JSON не содержит ожидаемых строк из второй таблицы.
[b]Обновление 2[/b]
Таблица, которую я хочу очистить:
Tillgodoräknanden
Kurskod
Kursnamn
Beslutsfattare
Poäng
Datum
Summa tillgodoräknade poäng:
10,5
Valfria kurser
xxx
10,5
2013-06-03
Подробнее здесь: [url]https://stackoverflow.com/questions/28387327/iterating-over-tr-in-a-table-with-cheerio-js[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия