基本上我正在尝试解析HTML字符串并使用Cheerio.js提取一些信息。
我的HTML是一个跟随(当然我缩小并简化了它):
<html>
<head></head>
<body>
<div>
<table>
<tr>
<td>
<a href="/link_1.php">Link 1</a>
</td>
<td>
<a href="/link_2.php">Link 2</a>
<a href="/link_3.php">Link 3</a>
</td>
<td>
<a href="/link_4.php">Link 4</a>
<a href="/link_5.php">Link 5</a>
</td>
</tr>
</table>
</div>
</body>
</html>
我的代码就是这个:
var cheerio = require("cheerio");
var $ = cheerio.load(html);
var page = $.root();
var tr = page.find("tr");
console.log(tr.find("> :nth-child(2) a").length);
您可以尝试here。
我期望返回2
的代码,因为tr
元素的第二个直接子元素中有两个链接。但是,这将返回5
,并返回tr
中的所有链接。
我尝试使用jQuery做同样的事情,结果应该是see。
我还注意到删除<html>
代码会使其正常工作,但我不知道原因。
我做错了什么,或者我应该向开发人员报告这个错误?
修改:我刚开了an issue on GitHub。
答案 0 :(得分:0)
这可以解决您的问题,如果您发现孩子们只反对一般的find()语句,这会有所帮助!
var $ = cheerio.load(html);
var page = $.root();
var tr = page.find("tr");
console.log(tr.children('td:nth-child(2)').children("a").length)
or
console.log(tr.find("> :nth-child(2)").find('a').length)