Document.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :root pseudo-class selector, matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :root pseudo-class selector, matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Fail | Pass | Pass | Pass | Fail |
Document.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Fail | Pass | Pass | Pass | Fail |
Document.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Document.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :root pseudo-class selector, not matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :root pseudo-class selector, not matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Detached Element.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :root pseudo-class selector, not matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :root pseudo-class selector, not matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
Fragment.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple '] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange '] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora'] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ] | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :root pseudo-class selector, not matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :root pseudo-class selector, not matching document root element: :root | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Fail | Pass | Pass | Pass | Fail |
In-document Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target | Fail | Pass | Pass | Pass | Fail |
In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :not pseudo-class selector, matching : #not>:not(div) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*) | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2 ~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, whitespace after: #sibling-p2~ #sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, whitespace before: #sibling-p2 ~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |
In-document Element.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3 | Pass | Pass | Pass | Pass | Pass |