Css selectors 使用CSS选择器排除具有特殊父元素的元素
我需要用classCss selectors 使用CSS选择器排除具有特殊父元素的元素,css-selectors,jsoup,Css Selectors,Jsoup,我需要用class“exclude”选择所有没有祖先(上几级)的元素。如何使用jsoup执行此操作?使用选择器,这是一个非常重要的问题,尤其是从开始时。换句话说,类似于 doc.select("div:not(.exclude) a"); 不起作用,因为在第一个示例中,您的中间无类是:not(.exclude),对于其余元素,任何较高级别的元素也可能匹配:not(.exclude) 一个非常简单的解决方法是分两个单独的步骤进行,这意味着使用两个单独的选择器: 选择所有元素 然后,手动排除具有特
“exclude”
选择所有没有祖先(上几级)的
元素。如何使用jsoup执行此操作?使用选择器,这是一个非常重要的问题,尤其是从开始时。换句话说,类似于
doc.select("div:not(.exclude) a");
不起作用,因为在第一个示例中,您的中间无类
是:not(.exclude)
,对于其余元素,任何较高级别的
元素也可能匹配:not(.exclude)
一个非常简单的解决方法是分两个单独的步骤进行,这意味着使用两个单独的选择器:
选择所有
元素
然后,手动排除具有特定类的祖先的类
在CSS中,这是使用覆盖规则实现的。在jsoup中,使用not()
方法(注意:这与:not()
伪类不同,后者当前不接受复杂选择器,除非jsoup以不同方式实现它):
如果出于任何原因,您被限制使用一个选择器,那么您可能会陷入困境。您必须查看正在使用的HTML,并查看是否可以根据您所掌握的有关HTML结构的信息构造选择器。例如,您可以查看那些可能具有类exclude
的元素的父元素。该类是否仅出现在共享同一父级的顶级
元素上?如果是这样,您可以使用子选择器将:not(.exclude)
锚定到父项:
doc.select("#parent > div:not(.exclude) a");
尽管子代选择器仍然用于从div:not(.exclude)
中定位
元素,但它永远不会与无类元素匹配,因为无类元素不是此假设父元素的子元素
如果您不能根据结构对exclude
类可能出现的位置做出任何假设,并且不能单独排除不需要的元素,那么这个问题就没有太多的解决方案。Hmm…您不能做相反的事吗?将样式应用于所有链接,并将“普通”样式重新应用于“排除”的后代。因为您可以尝试执行如下操作:div:not(.exclude)a{color:red;}
。但是,由于您所针对的
也有
祖先,而没有“exclude”类,因此它将不起作用。您可以执行如下操作:a{color:blue}
和div.exclude a{color:red!important}
。
doc.select("#parent > div:not(.exclude) a");