🔗ally.query.focusable
Finds focusable elements in the DOM.
🔗Description
The query infrastructure provides two different implementations. The "quick"
strategy uses document.querySelectorAll
and is able to find most focusable elements. Elements that are made focusable by way of CSS properties cannot be queried that way, though. To allow finding more focusable elements, the "strict"
strategy makes use of TreeWalker to "manually" iterate over the DOM. While the "strict"
strategy provides more accurate results, it is slower than the "quick"
strategy. The default strategy is "quick"
.
The "all"
strategy, used internally by ally.maintain.disabled
will find all the elements that are either focus relevant or only tabbable - including elements that would be focusable, were they not visually hidden or disabled.
Consult the data tables what browsers consider focusable to learn how HTML elements behave across browsers and what ally.js considers focusable in strategy: "strict"
or strategy: "quick"
.
🔗Usage
var elements = ally.query.focusable({
context: '.within-filter-selector',
includeContext: true,
strategy: 'quick',
});
🔗Arguments
Name | Type | Default | Description |
---|---|---|---|
context | <selector> | documentElement | The scope of the DOM in which to search. The first element of a collection is used. |
includeContext | boolean | false | Prepend the context element if it is focusable. |
strategy | "quick" , "strict" , "all" | "quick" | The approach used to find elements. |
🔗Returns
Array of HTMLElement
.
🔗Examples
🔗Example: ally.query.tabbable Example
ally.query.tabbable Example on jsbin.complay with the example on jsbin.com or open the source document
🔗Example: ally.query.focusable Example
ally.query.focusable Example on jsbin.complay with the example on jsbin.com or open the source document
🔗Changes
- Since
v#master
thecontext
option can point to another document (e.g.<body>
in an iframe)
🔗Notes
only-tabbable
in the focusable browser compatibility tables is not identified by ally.is.focusable
or ally.is.tabbable
, only by ally.is.onlyTabbable
. That is because these elements cannot be interacted with via script, i.e. calling element.focus()
does not have any effect.🔗Related resources
ally.query.firstTabbable
finds the first keyboard focusable elementally.query.tabbable
finds all keyboard focusable elements in DOM orderally.query.tabsequence
finds all keyboard focusable elements in Sequential Navigation Focus Orderally.is.focusable
used to filter focusable elements