Cheerio:如何根据文本内容选择元素

Cheerio: How to select element by text content?

本文关键字:选择 元素 文本 何根 Cheerio      更新时间:2023-09-26

我有一些类似的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选择器(如评论中所指出的):

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

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

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

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

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

这是css加上:contains伪代码,它是jQuery的一部分,由cheerio支持。