2016-10-15 14 views
0

このMeteorサーバーコードでは、Cheerio/jQueryを使用して、次のHTMLを含むWebページの第6のtd要素から値 "44 years"を取得します。
それは未定義ですが、どのようにそれを行うには?おかげCheerioでページtd要素からテキストを抽出

<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; 
    } 
}); 
+0

td.labelを使用して、実際にあなたが探しているものを選択していないと思います。 – r1verside

+0

'elem..nextSibling'が間違っています。 – Mohammad

+0

実際に動作しているコードを投稿してください。 – r1verside

答えて

0

にこのセレクタをあなたのロジックを記述することができます「サイクルクラスラベルを持つすべてのTDのDOM要素」、そしてあなたのHTMLで、サイクルが名前になります列のみ、そして年齢:だから

<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:」のみになるので、「if文」の中に入ることはありません。

また、HTML要素のclass属性を最初に置き、 "colspan"属性の後の2番目の要素にコードを記述するときに混乱する可能性があることに気付きました。

だから、解決策は次のように各要素を順番にセレクタを変更することです:それは何年でしょうそのようにあなたがそれを残す場合は

//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 "要素はその兄弟要素を検索しますが、最後の要素のためにnoneになります。このようなので、

、あなたはすでにそれを見つけた場合、あなたは一度だけ見つかった要素を表示する必要があり、:

//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、つまり最後の列の値を取得し、このコードを試してみてください、それのチェックを追加したい場合。 。 $( 'TD [クラス=ラベル]')、各((I、elemは)=> {

が実際に言っている:あなたはここでもしループ

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 
     } 
    }); 
関連する問題