Cheerio:如何根据文本内容选择元素
Cheerio: How to select element by text content?
我有一些类似的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支持。
相关文章:
- WebdriverIO waitForExist()选择元素's选定的选项
- 如何选择元素的第n个子元素
- Angular没有根据模型更新我的选择元素
- jquery使用name from变量按类选择元素
- 如何使用jQuery按数据日期属性选择元素
- 向html选择元素添加选项
- 使用Jquery在相同类型的元素中选择元素
- 他们是如何使用angular/jqLite find()方法按属性名称和值选择元素的?ng conf 2015
- 如何在Angular中清除选择元素中的过滤器
- 使用其中一个元素作为参考点,从Javascript数组中选择元素
- Javascript选择元素到字符串的比较
- Angular始终选择选择元素中的第一个选项
- 使用 jquery .find() 遍历按类和存储属性选择元素
- 通过 id json, jquery 选择元素
- 如何基于另一个已经存在的选择器选择元素
- 禁用多个选择元素中的非“选定”选项,但使用 jquery 的一个除外
- HTML 选择元素的只读等效项
- 在iPad上,如何通过Javascript事件在选择元素上设置focus()而不显示选项
- 单击事件似乎不适用于 IE 中的选择元素
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载