Cheerio:如何按文本内容 select 元素?
Cheerio: How to select element by text content?
我有一些 HTML 这样的:
<span id="cod">Code:</span> <span>12345</span>
<span>Category:</span> <span>faucets</span>
我想获取类别名称 ("faucets")。
这是我的试用版:
var $ = cheerio.load(html.contents);
var category = $('span[innerHTML="Category:"]').next().text();
但这不起作用(innerHTML
修饰符没有 select 任何东西)。
有线索吗?
您的代码不起作用的原因是因为 [innerHTML]
是一个属性 selector,并且 innerHTML
不是元素的属性(这意味着什么都不是selected).
您可以根据文本过滤 span
元素。在下面的示例中,.trim()
用于 trim 关闭任何空格。如果文本等于 'Category:',则该元素包含在过滤后的返回元素集中。
var category = $('span').filter(function() {
return $(this).text().trim() === 'Category:';
}).next().text();
上面的代码片段将过滤文本恰好为 'Category:' 的元素。如果你想要 select 元素,如果它们的文本 包含 那个字符串,你可以使用 :contains
select 或者(正如评论中指出的那样) :
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 加上属于 jQuery 并受 cheerio 支持的 :contains
伪。
我有一些 HTML 这样的:
<span id="cod">Code:</span> <span>12345</span>
<span>Category:</span> <span>faucets</span>
我想获取类别名称 ("faucets")。 这是我的试用版:
var $ = cheerio.load(html.contents);
var category = $('span[innerHTML="Category:"]').next().text();
但这不起作用(innerHTML
修饰符没有 select 任何东西)。
有线索吗?
您的代码不起作用的原因是因为 [innerHTML]
是一个属性 selector,并且 innerHTML
不是元素的属性(这意味着什么都不是selected).
您可以根据文本过滤 span
元素。在下面的示例中,.trim()
用于 trim 关闭任何空格。如果文本等于 'Category:',则该元素包含在过滤后的返回元素集中。
var category = $('span').filter(function() {
return $(this).text().trim() === 'Category:';
}).next().text();
上面的代码片段将过滤文本恰好为 'Category:' 的元素。如果你想要 select 元素,如果它们的文本 包含 那个字符串,你可以使用 :contains
select 或者(正如评论中指出的那样) :
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 加上属于 jQuery 并受 cheerio 支持的 :contains
伪。