Извлечение текста из элемента страницы td с помощью Cheerio

Этот код сервера Meteor использует Cheerio / jQuery для получения значения «44 года» от шестого tdэлемента веб-страницы, который содержит следующий html;
Это дает неопределенный, Любая идея, как это сделать? Спасибо

<tr>
  <td class="label" style="white-space:nowrap">Nmae:</td>
  <td>&nbsp;</td>
  <td colspan="2" class="bodyText">male</td>
  <td colspan="2" class="label">Age:</td>
  <td class="bodyText" width="1%">&nbsp;</td>
  <td colspan="2" class="bodyText">44 years</td>  <--------------
</tr>
$('td[class=label]').each((i, elem) => { //<------ $ is cheerio object
  let str = elem.innerHTML;
  console.log(str);    //<---------- undefined
  if (str === '44 years') {
    console.log('found it');
    let age = elem.nextSibling.nextSibling.innerHTML;
    console.log(age);
    return false;
  }
});

javascript,jquery,html,cheerio,

0

Ответов: 2


0 принят

Здесь этот селектор: $ ('td [class = label]'). Each ((i, elem) => {

на самом деле говорит: «Циклируйте каждый элемент TD DOM, который имеет метку класса», и в вашем HTML единственные столбцы, которые будут циклироваться, будут Name и Age:

<td class="label" style="white-space:nowrap">Nmae:</td>
<td colspan="2" class="label">Age:</td>

Поэтому, когда вы делаете этот код:

let str = elem.innerHTML;
if (str === '44 years') {

Он никогда не войдет в «заявление», потому что единственные столбцы, на которых они ездят на велосипеде, не имеют «44 лет», они будут только «Nmae:» и «Age:».

Также я заметил, что вы сначала кладете атрибут класса элемента HTML, а второй - после атрибута colspan, который может сбивать с толку при написании кода.

Таким образом, решение состоит в том, чтобы изменить селектор, чтобы циклически перемещаться по каждому элементу следующим образом:

//Select all "td" within "tr"
// vvv 
$('tr td').each((i, elem) => { //<------ $ is cheerio object
  let str = elem.innerHTML;
  console.log(str);    //<---------- undefined
  if (str === '44 years') {
    console.log('found it');
    let age = elem.nextSibling.nextSibling.innerHTML;
    console.log(age);
    return false;
  }
});

Если вы оставите его так, он найдет годы, но он также выкинет ошибку, потому что последний элемент «td» будет искать своих братьев и сестер, но они не являются ничем, потому что последний элемент.

Итак, если вы его уже нашли, вам нужно только показать элемент, который был найден, например:

//Select all "td" within "tr"
// vvv 
$('tr td').each((i, elem) => { 
  let str = elem.innerHTML;
  console.log(str);    //<---------- String for each column
  if (str === '44 years') {   
    console.log('found it');
    let age = elem;    
    console.log(age);
    return false;
  }
});

Надеюсь, поможет.

Лео.


0

Если вы хотите получить последнее значение столбца, то есть 44 и добавить его, попробуйте этот код. Вы можете написать свою логику в if loop

 table.find('tr').each(function (i, elem){ 
       var $tds = $(this).find('td');
         var   str= $tds.eq(5).text();
      console.log(str);    //<-- last column value
      if (str === '44 years') {
        console.log('found it');
    // write your code here
      }
    });
JavaScript, JQuery, HTML, здор`ово,
Похожие вопросы