基本上我正在尝试解析 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 .
最佳答案
这解决了您的问题,如果您找到 children 反对一般的 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)
关于javascript - 与 jQuery 相比,Cheerio 和 `.find()` 返回的元素过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33713139/