goodreads 站点上 jQuery 选择器的行为不一致

Inconsistent behavior of jQuery selectors on goodreads site

提问人:Anatoly 提问时间:8/26/2020 更新时间:8/26/2020 访问量:18

问:

尝试从 goodreads 网站提取报价并遇到不一致的行为。例如,转到此页面: https://www.goodreads.com/quotes?page=56 并在 Chrome 控制台中运行此选择器:您将获得一个节点列表,其中引用马克吐温:jQuery(".quote")

“每个人都是月亮,都有他从不向任何人展示的黑暗面。” ——马克·吐温

是第二个,你可以直观地看到它是第二个。

但是当你运行时:它什么都不返回,只有当你运行它时,它才会返回马克吐温的名言,这应该是第二个,而不是第三个。jQuery(".quotes .quote:nth-of-type(2)")jQuery(".quotes .quote:nth-of-type(3)")

为什么会这样?

jQuery :jquery-selectors html解析

评论

1赞 freedomn-m 8/26/2020
尝试:jQuery(".quotes :nth-of-type(2)").is(".quote")

答:

1赞 CertainPerformance 8/26/2020 #1

检查该页面上的元素,您将获得:

enter image description here

第二个元素不是 ,而是:.quote

<div data-react-class="ReactComponents.NativeAd" ... ></div>

所以不选择任何东西,因为没有一个元素是父元素的第二个子元素;这就是广告所在的地方。.quotes .quote:nth-of-type(2).quote.quotes

.quotes .quote:nth-of-type(3)选择第二个引号是因为广告位于第一个引号和第二个引号之间,因此第二个引号实际上是其父引号的第 3 个子引号。

请记住,选择第 n 个标签名称。在这里,由于所有子项都是 s,因此选择第三个 ,它恰好是 .(它选择类集合中的元素)nth-of-type<div>.quotes .quote:nth-of-type(3)<div>.quotenth