非法的CSS选择器

时间:2013-06-07 13:31:21

标签: css selenium css-selectors

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

#coordinatonTable .odd:not(:has(.dataTables_empty))

我收到“指定了无效或非法字符串”错误。 我尝试了w3schools的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"
  ...

如果他们没有空的孩子,我想得到所有奇怪的元素。

3 个答案:

答案 0 :(得分:4)

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

我不知道为什么你的其他例子不会导致错误。他们为我做了。

答案 1 :(得分:2)

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

#coordinatonTable .odd:not(.dataTables_empty)

答案 2 :(得分:1)

您正在寻找的是一个非常令人垂涎(但不可用)的父选择器。与其他人提到的一样,: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 */
}