2016-01-10 41 views
6

我有一些HTML这样的:Cheerio:如何通过文本内容选择元素?

<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修改不选择任何内容)。

任何线索?

+0

你不能给你的物品上课吗? –

+1

项目不是'我的':-)我正在解析一个我不控制的外部页面... – MarcoS

回答

9

代码不工作的原因是因为[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

工程就像一个魅力,谢谢。不知道'filter()',我感觉很笨... :-( – MarcoS

+1

如果他想检查它是否包含字符串,他也可以使用'$('span:contains(“Category: “)')' – Paulpro

+0

@Paulpro Cheerio有一个':contains'选择器吗?我检查了[文档](https://github.com/cheeriojs/cheerio),并且我没有看到它,所以我 –