请您澄清一下我使用的CSS选择器是否与逗号一起使用,或者我是不是完全理解它应该如何工作?
我试图解析此页面的表格 http://www.citefactor.org/journal-impact-factor-list-2014_0-A.html
以下CSS选择器返回树元素而不是两个
div.panel-body.news > table > tbody > tr:eq(2),tr:eq(1)
进行测试
答案 0 :(得分:2)
为什么下面的选择器会提取3个元素而不是2?
div.panel-body.news > table > tbody > tr:eq(2),tr:eq(1)
上面的选择器字符串表示处理程序做两件事(第一个对应于逗号之前的部分,第二个点对应于逗号之后的部分):
div
查找class='panel-body news'
元素。在其 直接子项 (>
表示只选择直接子项而不是后代)中,找到所有table
元素,然后在该列表中查找所有tbody
元素是表的直接子元素。现在,在tbody
元素的集合下,选择第三个tr
(:eq(2)
部分,因为索引为0)。tr
元素(即,选择每个表的第二行)。在您的代码中,有两个table
元素。第一个表是索引在顶部的表,下一个是具有实际数据的表。因此,以下是获取的元素:
table
的第三行,因为它是div.panel-body.news
的直接子项。索引位于顶部的另一个表格是{strong> 不是div.panel-body.news
的直接子 ,因为它位于center
标记下。此外,它只有两行,所以第一部分匹配一个元素。那么,为什么以下选择器只选择2个元素呢?
div.panel-body.news > table > tbody > tr:eq(1),tr:eq(2)
上面的选择器只会选择两个元素,因为:
div.panel-body.news
的直接子项,因此逗号前的选择器字符串只匹配第二个数据行那么,你能解释一下吗?
div.panel-body.news > table > tbody > tr:eq(1),tr:eq(3)
上面的选择器只会选择两个元素,因为:
div.panel-body.news
的直接子项,因此逗号前的选择器字符串只匹配第二个数据行好的,如果我想获取第二和第三个数据行,那么正确的选择器是什么?
您应该按如下方式编写选择器:
div.panel-body.news > table > tbody > tr:eq(2),
div.panel-body.news > table > tbody > tr:eq(1)