Improve listbox support in selectOptions #1231
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Allow
role="option"
elements to contain more complex htmlWhat:
Allow
role="option"
elements to contain complex HTML when usingselectOption
.selectOption
will perform a look up of thelistbox
option elements, only comparing the trimmed visible text against the given option value.Example
Why:
The current implementation is too strict and in some cases does not make sense. If the
role="option"
element contains any HTML structure, it compares the given option against the rawinnerHTML
.Using the example above, the call that would work would me
With these fixes, this becomes
How:
Implement a
misc
util namedgetVisibleText
which clones the node, removes nodes that are not visible, extracts thetextContent
, then removes duplicate spaces.The visibility heuristic follows the implementation in
./utils/isVisible
(usinggetComputedStyle
) and also looks ataria-hidden
(since therole="listbox"
/role="option"
is rooted on aria, this seemed like a reasonable approach).Checklist: