Cheerio:如何按文字内容选择元素?

时间:2016-01-10 19:20:13

标签: javascript jquery-selectors cheerio

我有一些像这样的HTML:

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

我想获取类别名称(&#34;水龙头&#34;)。 这是我的试用版:

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

但这不起作用(innerHTML修饰符不会选择任何内容。)

有任何线索吗?

2 个答案:

答案 0 :(得分:22)

您的代码无效的原因是[innerHTML]是属性选择器,而innerHTML不是元素的属性(这意味着没有选择任何内容)。

您可以根据文本过滤span元素。在下面的示例中,.trim()用于修剪任何空格。如果文本等于'Category:',那么该元素将包含在已过滤的返回元素集中。

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

如果文本正好是“类别:”,则上面的代码段会过滤元素。如果要在文本包含该字符串时选择元素,可以使用:contains选择器(如注释中所指出的):

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

或者,使用.indexOf()方法也可以:

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

答案 1 :(得分:0)

一个更简单的解决方案是:

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

这是css以及jQuery一部分并受cheerio支持的:contains伪代码。