Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css selectors 使用CSS选择器排除具有特殊父元素的元素_Css Selectors_Jsoup - Fatal编程技术网

Css selectors 使用CSS选择器排除具有特殊父元素的元素

Css selectors 使用CSS选择器排除具有特殊父元素的元素,css-selectors,jsoup,Css Selectors,Jsoup,我需要用class“exclude”选择所有没有祖先(上几级)的元素。如何使用jsoup执行此操作?使用选择器,这是一个非常重要的问题,尤其是从开始时。换句话说,类似于 doc.select("div:not(.exclude) a"); 不起作用,因为在第一个示例中,您的中间无类是:not(.exclude),对于其余元素,任何较高级别的元素也可能匹配:not(.exclude) 一个非常简单的解决方法是分两个单独的步骤进行,这意味着使用两个单独的选择器: 选择所有元素 然后,手动排除具有特

我需要用class
“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");