Перебор TR в таблице с помощью Cheerio.js ⇐ Jquery
Перебор TR в таблице с помощью Cheerio.js
У меня возникли проблемы с использованием селекторов, доступных для Cheerio.js, который я использую на своем сервере Node. Ядро предположительно основано на jQuery, однако я не могу заставить его работать с тем же выбором, что и с собственным jQuery.
У меня есть DOM, который выглядит примерно так:
здесь несколько ячеек Это те строки, которые мне нужны Поскольку на странице есть две таблицы со «листингом» класса, я не могу выбрать их напрямую, поэтому мне нужна ссылка на div с классом «test». Выбор, который я могу выполнить с помощью jQuery, будет примерно таким:
$('div.test tbody tr') Но это не работает с Cheerio. Если я запущу $('div[class="test"] tr') я получу все строки таблицы, даже строки заголовка, так что у меня это не работает.
Есть предположения?
Обновление: Это фактический код, который я выполняю (не работает):
// Загружаем HTML var $ = Cheerio.load(html, { нормализоватьбелое пространство: правда }); $('div.tilgodo tbody tr').each(function(){ console.log("Найден указанный курс..."); вар детей = $(это).дети(); var Credits = parseFloat($(дети[3]).text().replace(',', '.')); // Нам нужно заменить запятую точкой, поскольку parseFloats поддерживает точки только по замыслу вар строка = { "курс": $(дети[1]).text().trim(), «оценка»: ноль, «кредиты»: кредиты, «дата»: $(дети[4]).текст() }; // Отправляем курс в объект JSON console.log("Переместить курс на объект..."); console.log("------------------------------------------\n" ); data.credited_courses.push(строка); data.credited_courses_credits += parseFloat(кредиты); }); Следующий код работает для первой таблицы:
$('tr.incomplete.course').each(function(i, tr){ console.log("Это номер курса: " + parseInt(course_count+1)); console.log("Найден незаконченный курс..."); вар детей = $(это).дети(); var Credits = parseFloat($(дети[2]).text().replace(',', '.').match(/(\+|-)?((\d+(\.\d+)?) |(\.\d+))/)[0]); // Отфильтровываем любые круглые скобки и нечетные символы вар строка = { "курс": $(дети[1]).text(), "оценка": $(дети[3]).text(), «кредиты»: кредиты, «дата»: $(дети[5]).текст() }; // Суммируем общую сумму кредитов по всем курсам console.log("Добавить кредиты в incompleted_credits..."); data.incompleted_credits += кредиты; console.log("Переместить курс на объект..."); data.incompleted_courses.push(строка); курс_счет++; }); Когда я говорю, что это не работает, это означает, что возвращаемый мной объект JSON не содержит ожидаемых строк из второй таблицы.
Обновление 2 Таблица, которую я хочу очистить:
Тилльгодоракнанден Курскод Курснамн Беслуцфаттаре Поанг Датум Сумма по годам: 10,5 Вальфрия курсер ххх 10,5 03.06.2013
У меня возникли проблемы с использованием селекторов, доступных для Cheerio.js, который я использую на своем сервере Node. Ядро предположительно основано на jQuery, однако я не могу заставить его работать с тем же выбором, что и с собственным jQuery.
У меня есть DOM, который выглядит примерно так:
здесь несколько ячеек Это те строки, которые мне нужны Поскольку на странице есть две таблицы со «листингом» класса, я не могу выбрать их напрямую, поэтому мне нужна ссылка на div с классом «test». Выбор, который я могу выполнить с помощью jQuery, будет примерно таким:
$('div.test tbody tr') Но это не работает с Cheerio. Если я запущу $('div[class="test"] tr') я получу все строки таблицы, даже строки заголовка, так что у меня это не работает.
Есть предположения?
Обновление: Это фактический код, который я выполняю (не работает):
// Загружаем HTML var $ = Cheerio.load(html, { нормализоватьбелое пространство: правда }); $('div.tilgodo tbody tr').each(function(){ console.log("Найден указанный курс..."); вар детей = $(это).дети(); var Credits = parseFloat($(дети[3]).text().replace(',', '.')); // Нам нужно заменить запятую точкой, поскольку parseFloats поддерживает точки только по замыслу вар строка = { "курс": $(дети[1]).text().trim(), «оценка»: ноль, «кредиты»: кредиты, «дата»: $(дети[4]).текст() }; // Отправляем курс в объект JSON console.log("Переместить курс на объект..."); console.log("------------------------------------------\n" ); data.credited_courses.push(строка); data.credited_courses_credits += parseFloat(кредиты); }); Следующий код работает для первой таблицы:
$('tr.incomplete.course').each(function(i, tr){ console.log("Это номер курса: " + parseInt(course_count+1)); console.log("Найден незаконченный курс..."); вар детей = $(это).дети(); var Credits = parseFloat($(дети[2]).text().replace(',', '.').match(/(\+|-)?((\d+(\.\d+)?) |(\.\d+))/)[0]); // Отфильтровываем любые круглые скобки и нечетные символы вар строка = { "курс": $(дети[1]).text(), "оценка": $(дети[3]).text(), «кредиты»: кредиты, «дата»: $(дети[5]).текст() }; // Суммируем общую сумму кредитов по всем курсам console.log("Добавить кредиты в incompleted_credits..."); data.incompleted_credits += кредиты; console.log("Переместить курс на объект..."); data.incompleted_courses.push(строка); курс_счет++; }); Когда я говорю, что это не работает, это означает, что возвращаемый мной объект JSON не содержит ожидаемых строк из второй таблицы.
Обновление 2 Таблица, которую я хочу очистить:
Тилльгодоракнанден Курскод Курснамн Беслуцфаттаре Поанг Датум Сумма по годам: 10,5 Вальфрия курсер ххх 10,5 03.06.2013
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Cheerio возвращает неопределенное значение при вызове .each() для элементов
Anonymous » » в форуме Jquery - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-