@@ -46,9 +46,10 @@ function queryAllByLabelText(
46
46
normalizer : matchNormalizer ,
47
47
} )
48
48
const labelledElements = labels
49
- . map ( label => {
49
+ . reduce ( ( matchedElements , label ) => {
50
+ const elementsForLabel = [ ]
50
51
if ( label . control ) {
51
- return label . control
52
+ elementsForLabel . push ( label . control )
52
53
}
53
54
/* istanbul ignore if */
54
55
if ( label . getAttribute ( 'for' ) ) {
@@ -57,21 +58,27 @@ function queryAllByLabelText(
57
58
// <label for="someId">text</label><input id="someId" />
58
59
59
60
// .control support has landed in jsdom (https://github.com/jsdom/jsdom/issues/2175)
60
- return container . querySelector ( `[id="${ label . getAttribute ( 'for' ) } "]` )
61
+ elementsForLabel . push (
62
+ container . querySelector ( `[id="${ label . getAttribute ( 'for' ) } "]` ) ,
63
+ )
61
64
}
62
65
if ( label . getAttribute ( 'id' ) ) {
63
66
// <label id="someId">text</label><input aria-labelledby="someId" />
64
- return container . querySelector (
65
- `[aria-labelledby~="${ label . getAttribute ( 'id' ) } "]` ,
66
- )
67
+ container
68
+ . querySelectorAll ( `[aria-labelledby~="${ label . getAttribute ( 'id' ) } "]` )
69
+ . forEach ( element => elementsForLabel . push ( element ) )
67
70
}
68
71
if ( label . childNodes . length ) {
69
72
// <label>text: <input /></label>
70
- return label . querySelector ( selector )
73
+ const formControlSelector =
74
+ 'button, input, meter, output, progress, select, textarea'
75
+ label
76
+ . querySelectorAll ( formControlSelector )
77
+ . forEach ( element => elementsForLabel . push ( element ) )
71
78
}
72
- return null
73
- } )
74
- . filter ( label => label !== null )
79
+ return matchedElements . concat ( elementsForLabel )
80
+ } , [ ] )
81
+ . filter ( element => element !== null )
75
82
. concat ( queryAllByAttribute ( 'aria-label' , container , text , { exact} ) )
76
83
77
84
const possibleAriaLabelElements = queryAllByText ( container , text , {
@@ -95,7 +102,9 @@ function queryAllByLabelText(
95
102
[ ] ,
96
103
)
97
104
98
- return Array . from ( new Set ( [ ...labelledElements , ...ariaLabelledElements ] ) )
105
+ return Array . from (
106
+ new Set ( [ ...labelledElements , ...ariaLabelledElements ] ) ,
107
+ ) . filter ( element => element . matches ( selector ) )
99
108
}
100
109
101
110
// the getAll* query would normally look like this:
0 commit comments