非法CSS选择器

非法CSS选择器,css,selenium,css-selectors,Css,Selenium,Css Selectors,我想将此CSS选择器与Selenium webdriver一起使用 #coordinatonTable .odd:not(:has(.dataTables_empty)) 我收到“指定了无效或非法的字符串”错误。 我尝试了W3学校的jquery选择器测试。此服务还显示“非法选择器”。 如果我缩短选择器,它就会工作 #short .odd:not(:has(.dataTables_empty)) #coordinatonTable .odd:not(:has(.short)) #short .o

我想将此CSS选择器与Selenium webdriver一起使用

#coordinatonTable .odd:not(:has(.dataTables_empty))
我收到“指定了无效或非法的字符串”错误。 我尝试了W3学校的jquery选择器测试。此服务还显示“非法选择器”。 如果我缩短选择器,它就会工作

#short .odd:not(:has(.dataTables_empty))
#coordinatonTable .odd:not(:has(.short))
#short .odd:not(:has(.short))
看起来选择器太长了。但事实并非如此。 有什么建议吗

html部分的结构如下所示:

id="coordinatonTable"
  class="odd"
    class="dataTables_empty"
  class="odd"
    class="something"
  class="odd"
    class="somethingelse"
  ...

如果没有空的子元素,我希望获取所有奇数元素。

:has
是一个jQuery选择器-它不是CSS3规范的一部分。如果您只是检查类是否不存在,请执行以下操作:


#coordinantable.odd:not(.dataTables_empty)

:has
不是有效的CSS选择器。它是jQuery扩展,在任何CSS文件中都无效


我不知道为什么你的其他例子没有引起错误。它们是为我做的。

您正在寻找的是一个备受垂涎(但不可用)的家长选择器。与其他人提到的一样,
:has
仅是jQuery,将被CSS拒绝。目前,使用纯CSS无法根据元素包含的子元素更改元素的样式。如果您可以访问执行循环并创建元素的后端,那么可以先检查是否有子级,然后添加一个“空”类和“奇”类

例如:

id="coordinatonTable"
    class="odd empty"
        class="dataTables_empty"
    class="odd"
        class="something"
    class="odd"
        class="somethingelse"
    ...
或者,如果不可能,可以在加载DOM后使用javascript循环,并将空类添加到父元素中。无论哪种方式,您都需要在父元素上获取一个类,以便执行以下操作:

.odd.empty {
    /* Special CSS for empty cell */
}

好的,谢谢。我混合了两种不同的东西。没错。但是如果没有has,我怎么能选择奇数元素呢?我更新了这个问题。@user1482309 CSS中没有“父选择器”。最简单的解决方案是向祖先元素添加一个类。您可以在服务器端或使用客户端代码(如jQuery)执行此操作。@user1482309是的,是的,但这会影响IE8和更低版本的兼容性。我想这完全取决于用例。