Здесь этот селектор: $ ('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;
}
});
Надеюсь, поможет.
Лео.