Javascript 与jQuery相比,ChereIO和`.find()`返回的元素太多
基本上,我正在尝试解析一个HTML字符串,并使用 我的HTML如下(当然我简化了它): 你可以试试 我希望代码返回Javascript 与jQuery相比,ChereIO和`.find()`返回的元素太多,javascript,jquery,html,cheerio,Javascript,Jquery,Html,Cheerio,基本上,我正在尝试解析一个HTML字符串,并使用 我的HTML如下(当然我简化了它): 你可以试试 我希望代码返回2,因为tr元素的第二个直接子元素中有两个链接。但是,这将返回5,返回tr中的所有链接 我用jQuery做了同样的尝试,结果是应该的 我还注意到,删除标记可以使它正常工作,但我不知道为什么 我是做错了什么,还是应该将此作为bug报告给开发人员 编辑:我刚打开。这解决了您的问题,如果您通过子项查找项目,而不仅仅是一个常规的find()语句,这会很有帮助 var $ = cheerio.
2
,因为tr
元素的第二个直接子元素中有两个链接。但是,这将返回5
,返回tr
中的所有链接
我用jQuery做了同样的尝试,结果是应该的
我还注意到,删除
标记可以使它正常工作,但我不知道为什么
我是做错了什么,还是应该将此作为bug报告给开发人员
编辑:我刚打开。这解决了您的问题,如果您通过子项查找项目,而不仅仅是一个常规的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)
你可能想在你的bug报告中包括这一点:谢谢,但我真的想知道为什么我的代码不起作用,而不是使用变通方法。我认为这只是你选择的方式中的一个错误,因为如果你这样做,它也起作用:console.log(tr.find(“>:nth child(2)”。find('a')。length)哦,这很有趣,谢谢你指出这一点。但是我选择元素的方式有什么问题?如果我删除
标记,它为什么会工作?我刚刚发现tr.find(“>:nth child(2)>a”)
实际上也在工作。但是,当我简化HTML代码时,这并不重要,因为
实际上不是直接的子级。您要查询的是查找表行的第二个子级,然后查找该子级的所有子级,即“a”,您正在沿着dom走,我相信,之前的代码是在DOM中遍历的,然后只选择所有元素,这些元素不是它以前找到的子元素所特有的:)
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);
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)