我正在为服务器端JS(have a look编写一个CSS选择器引擎!)。为了拥有坚实的基础,我开始使用Qwery(现有的选择器引擎)的测试。在那里,我发现a number of tests用于“关系优先查询”。显然,CSSselect(我的项目)没有显示预期的行为,但我不确定预期的是什么。
我已经搜索了文档,但找不到任何有用的信息。我目前的实现解释如下:
>
相当于:not(:root)
~
和+
相当于:not(:first-child)
Qwerys的解释似乎有所不同,但有什么官方的吗?
答案 0 :(得分:2)
没有。您可以查看http://www.w3.org/TR/CSS21/selector.html和http://www.w3.org/TR/css3-selectors/(CSS3)。
>
≠:not(:root)
。 :root
表示文档根目录,因此对于除一个元素之外的所有元素,您的“相等”都是正确的。相反,它是[direct] child combinator。~
≠:not(:first-child)
≠+
。主要是因为~
和+
彼此不同,等同性是可传递的。两者都是兄弟组合,一个是general,另一个是adjacent组合。当然,儿童组合子暗示孩子不是文件根,而相邻的组合子暗示兄弟姐妹不是第一个孩子。
答案 1 :(得分:1)
这些“关系优先”选择器是非标准扩展,因此没有任何“官方”定义它们。根据您的说明> foo
,+ foo
和~ foo
似乎分别等同于* > foo
,* + foo
和* ~ foo
。