@@ -9,6 +9,31 @@ import {
9
9
buildQueries ,
10
10
} from './all-utils'
11
11
12
+ function ignoreHiddenElements ( container , selector , baseArray ) {
13
+ const hiddenElements = [
14
+ ...Array . from ( container . querySelectorAll ( "[aria-hidden='true']" ) ) ,
15
+ ]
16
+ baseArray . forEach ( base => {
17
+ if ( base . getAttribute ( 'aria-hidden' ) === 'true' ) {
18
+ hiddenElements . push ( base )
19
+ }
20
+ } )
21
+ let foundHiddenChildren = [ ...hiddenElements ]
22
+ hiddenElements . forEach ( hiddenElement => {
23
+ foundHiddenChildren = [
24
+ ...foundHiddenChildren ,
25
+ ...Array . from ( hiddenElement . querySelectorAll ( selector ) ) ,
26
+ ]
27
+ } )
28
+ const findSameNode = foundElement =>
29
+ ! foundHiddenChildren . find ( foundHiddenElement =>
30
+ foundElement . isSameNode ( foundHiddenElement ) ,
31
+ )
32
+ return [ ...baseArray , ...container . querySelectorAll ( selector ) ] . filter (
33
+ findSameNode ,
34
+ )
35
+ }
36
+
12
37
function queryAllByText (
13
38
container ,
14
39
text ,
@@ -28,7 +53,10 @@ function queryAllByText(
28
53
if ( typeof container . matches === 'function' && container . matches ( selector ) ) {
29
54
baseArray = [ container ]
30
55
}
31
- return [ ...baseArray , ...Array . from ( container . querySelectorAll ( selector ) ) ]
56
+
57
+ const foundElements = ignoreHiddenElements ( container , selector , baseArray )
58
+
59
+ return foundElements
32
60
. filter ( node => ! ignore || ! node . matches ( ignore ) )
33
61
. filter ( node => matcher ( getNodeText ( node ) , node , text , matchNormalizer ) )
34
62
}
0 commit comments