【问题标题】:Cheerio and `.find()` return too many elements compared to jQueryCheerio 和 `.find()` 与 jQuery 相比返回的元素太多
【发布时间】:2016-02-16 05:43:37
【问题描述】:

基本上,我正在尝试解析 HTML 字符串并使用 Cheerio.js 提取一些信息。

我的HTML是一个follow(当然是我简化和简化的):

<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

我还注意到删除&lt;html&gt; 标签可以使其正常工作,但我不知道为什么。

我是不是做错了什么,还是应该将此作为错误报告给开发人员?

编辑:我刚刚打开了an issue on GitHub

【问题讨论】:

标签: javascript jquery html cheerio


【解决方案1】:

这解决了您的问题,如果您通过子项而不是一般的 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)

【讨论】:

  • 谢谢,但我真的很想知道为什么我的代码不工作,而不是使用 workaroud。
  • 我认为这只是您选择方式的错误,因为如果您这样做,它也可以工作:console.log(tr.find("> :nth-child(2)") .find('a').length)
  • 哦,这很有趣,感谢您指出这一点。但是我选择元素的方式有什么问题?如果我删除了&lt;html&gt; 标签,为什么它会起作用?
  • 我刚刚发现tr.find(" &gt; :nth-child(2) &gt; a") 实际上也在工作。但是当我简化了我的 HTML 代码时,这并不重要,因为 &lt;a&gt; 实际上不是直接子代。
  • 那么你要查询的是找到表行的第二个孩子,然后找到那个孩子的所有孩子都是“a”,你正在走下 dom,我的信念是早些时候你的代码是沿着 DOM 走的,然后只选择所有不是 A 的元素,它不特定于它之前找到的子元素 :)
猜你喜欢
  • 2011-11-02
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 2014-06-15
相关资源
最近更新 更多