Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与jQuery相比,ChereIO和`.find()`返回的元素太多_Javascript_Jquery_Html_Cheerio - Fatal编程技术网

Javascript 与jQuery相比,ChereIO和`.find()`返回的元素太多

Javascript 与jQuery相比,ChereIO和`.find()`返回的元素太多,javascript,jquery,html,cheerio,Javascript,Jquery,Html,Cheerio,基本上,我正在尝试解析一个HTML字符串,并使用 我的HTML如下(当然我简化了它): 你可以试试 我希望代码返回2,因为tr元素的第二个直接子元素中有两个链接。但是,这将返回5,返回tr中的所有链接 我用jQuery做了同样的尝试,结果是应该的 我还注意到,删除标记可以使它正常工作,但我不知道为什么 我是做错了什么,还是应该将此作为bug报告给开发人员 编辑:我刚打开。这解决了您的问题,如果您通过子项查找项目,而不仅仅是一个常规的find()语句,这会很有帮助 var $ = cheerio.

基本上,我正在尝试解析一个HTML字符串,并使用

我的HTML如下(当然我简化了它):

你可以试试

我希望代码返回
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)