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

时间:2015-11-14 20:43:38

标签: 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

1 个答案:

答案 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)