2016-01-10 4 views
6

私はこのようないくつかのHTML持っている:私はカテゴリ名( "蛇口")を取得したいCheerio:テキストコンテンツで要素を選択するにはどうすればいいですか?

<span id="cod">Code:</span> <span>12345</span> 
<span>Category:</span> <span>faucets</span> 

を。 これは私の裁判です:

var $ = cheerio.load(html.contents); 
var category = $('span[innerHTML="Category:"]').next().text(); 

しかし、これは動作しません(innerHTML修飾子は何も選択しません)。

ヒント?

+0

あなたのアイテムにクラスを与えることはできませんか? –

+1

アイテムは '私のもの'ではありません:-)私はコントロールしていない外部ページを解析しています... – MarcoS

答えて

9

コードが機能しない理由は、[innerHTML]が属性セレクタであり、innerHTMLが要素の属性ではない(何も選択されていないことを意味する)ためです。

テキストに基づいてspan要素をフィルタリングできます。下の例では、.trim()を使用して空白を取り除きます。テキストが 'Category:'に等しい場合、要素はフィルタされた返された要素のセットに含まれます。

var category = $('span').filter(function() { 
    return $(this).text().trim() === 'Category:'; 
}).next().text(); 

そのテキストが正確である場合は、上記のスニペットは、要素をフィルタリングします「カテゴリー」。同様に動作します.indexOf()方法を使用して、代わりに

var category = $('span:contains("Category:")').next().text(); 

:あなたは自分のテキストその文字列が含まれている場合の要素を選択したい場合は、(コメントで指摘したように):containsセレクタを使用することができ

var category = $('span').filter(function() { 
    return $(this).text().indexOf('Category:') > -1; 
}).next().text(); 
+1

魅力のように動作します、ありがとう。 'filter()'について知りませんでした。私はかなり愚かな気がしています。:-( – MarcoS

+1

文字列が含まれているかどうかをチェックしたい場合は、 '$( 'span:contains(" Category: ") ')' – Paulpro

+0

@Paulpro Cheerioには ':contains'セレクタがありますか?[documentation](https://github.com/cheeriojs/cheerio)にチェックしましたが、私はそこにそれを見ませんでした。 –

関連する問題