javascript - 与 jQuery 相比,Cheerio 和 `.find()` 返回的元素过多

标签 javascript jquery html cheerio

基本上我正在尝试解析 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/

相关文章:

javascript - 我如何向现有的 tinyMCE 按钮添加额外的功能?

javascript - 查找所有以特定字符串开头和结尾的 div id

javascript - 如何从点击 javascript 中的一行中排除 <a> 标签?

jQuery 拖放 <li> 元素样式

html - 无法通过检查代码定位 CSS 文件

javascript - 带有gmail api的 Node js,API返回错误: Error: unauthorized_client

javascript - Canvas - 使用来自其他视频的 alpha 数据屏蔽视频速度很慢

Javascript 显示/隐藏多个 DIV

python :- passing HTML form input to python code and execute it

javascript - 如果选择了所有子节点,如何将父树节点标记为已选择