web-dev-qa-db-ja.com

Cheerio:テキストコンテンツで要素を選択する方法は?

次のような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修飾子は何も選択しません)。

どんな手掛かり?

12
MarcoS

コードが機能しないのは、_[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();
_
25
Josh Crozier