次のようなHTMLがあります。
<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
修飾子は何も選択しません)。
どんな手掛かり?
コードが機能しないのは、_[innerHTML]
_が属性セレクターであり、innerHTML
が要素の属性ではない(つまり、何も選択されていない)ためです。
テキストに基づいてspan
要素をフィルタリングできます。以下の例では、.trim()
を使用して空白を削除しています。テキストが「Category:」と等しい場合、要素はフィルターされた返された要素のセットに含まれます。
_var category = $('span').filter(function() {
return $(this).text().trim() === 'Category:';
}).next().text();
_
上記のスニペットは、テキストが正確に「Category:」の場合に要素をフィルタリングします。テキストcontainsその文字列の場合に要素を選択する場合は、_:contains
_セレクターを使用できます(コメントで指摘されています)。
_var category = $('span:contains("Category:")').next().text();
_
または、.indexOf()
メソッドを使用しても同様に機能します。
_var category = $('span').filter(function() {
return $(this).text().indexOf('Category:') > -1;
}).next().text();
_