2016-01-10 44 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),並且我沒有看到它,所以我 –

相關問題