@@ -48,10 +48,14 @@ function _querySelectorDeep(selector, findMany, root, allElements = null) {
4848 //remove white space at start of selector
4949 . replace ( / ^ \s + / g, '' )
5050 . replace ( / \s * ( [ > + ~ ] + ) \s * / g, '$1' ) , ' ' )
51- // filter out entry white selectors
52- . filter ( ( entry ) => ! ! entry ) ;
51+ // filter out entry white selectors
52+ . filter ( ( entry ) => ! ! entry )
53+ // convert "a > b" to ["a", "b"]
54+ . map ( ( entry ) => splitByCharacterUnlessQuoted ( entry , '>' ) ) ;
55+
5356 const possibleElementsIndex = splitSelector . length - 1 ;
54- const possibleElements = collectAllElementsDeep ( splitSelector [ possibleElementsIndex ] , root , allElements ) ;
57+ const lastSplitPart = splitSelector [ possibleElementsIndex ] [ splitSelector [ possibleElementsIndex ] . length - 1 ]
58+ const possibleElements = collectAllElementsDeep ( lastSplitPart , root , allElements ) ;
5559 const findElements = findMatchingElement ( splitSelector , possibleElementsIndex , root ) ;
5660 if ( findMany ) {
5761 acc = acc . concat ( possibleElements . filter ( findElements ) ) ;
@@ -79,7 +83,23 @@ function findMatchingElement(splitSelector, possibleElementsIndex, root) {
7983 let parent = element ;
8084 let foundElement = false ;
8185 while ( parent && ! isDocumentNode ( parent ) ) {
82- const foundMatch = parent . matches ( splitSelector [ position ] ) ;
86+ let foundMatch = true
87+ if ( splitSelector [ position ] . length === 1 ) {
88+ foundMatch = parent . matches ( splitSelector [ position ] ) ;
89+ } else {
90+ // selector is in the format "a > b"
91+ // make sure a few parents match in order
92+ const reversedParts = ( [ ] ) . concat ( splitSelector [ position ] ) . reverse ( )
93+ let newParent = parent
94+ for ( const part of reversedParts ) {
95+ if ( ! newParent || ! newParent . matches ( part ) ) {
96+ foundMatch = false
97+ break
98+ }
99+ newParent = findParentOrHost ( newParent , root ) ;
100+ }
101+ }
102+
83103 if ( foundMatch && position === 0 ) {
84104 foundElement = true ;
85105 break ;
0 commit comments