Access ARIA information from JavaScript
WAI-ARIA allows websites to provide
additional semantics to assistive technologies. Roles and attributes can be set
either explicitly (e.g. <span role="link">click me</span>
) or implicitly
(<a href="//example.com">click me</a>
implicitly has the role “link”).
While the implicit mappings make authoring accessible websites simpler, it
makes the task of calculating an element’s role and attributes more
complicated. This library takes care of exactly that.
npm install aria-api
This installation method works best if you use tools like webpack or
rollup. There is also an UMD build included as dist/aria.js
.
var aria = require('aria-api'):
aria.querySelector('landmark').forEach(landmark => {
if (!aria.matches(landmark, ':hidden')) {
var role = aria.getRole(landmark);
var name = aria.getName(landmark);
console.log(role, name);
}
});
Calculate an element’s role.
Note that this will return only the most specific role. If you want to know
whether an element has a role, use matches()
instead.
Calculate the value of an element’s attribute (state or property). The
“aria-“ prefix is not included in the attribute name.
Calculate an element’s name according to the Accessible Name and Description
Computation.
Calculate an element’s description according to the Accessible Name and
Description Computation.
Similar to Element.matches(),
this allows to check whether an element matches a selector. A selector can be
any of the following:
role
: Matches if the element has the specified role. This also works for:attribute
: Matches if the attribute is truthy. The “aria-“ prefix is not[attribute="value"]
: Matches if the value of the attribute converted toNote that combinations of selectors are not supported (e.g. main link
,link:hidden
, :not(:hidden)
). The single exception to this rule are
comma-separated lists of roles, e.g. link,button
.
Similar to Element.querySelector().
See matches()
for details.
Similar to Element.querySelectorAll().
See matches()
for details.
Similar to Element.closest().
See matches()
for details.
Similar to Node.parentNode,
but takes aria-owns
into account.
Similar to Node.childNodes,
but takes aria-owns
into account.
First of all, I thought that something like this should exist. I currently use
it for a11y-outline, a web extension
that generates outlines based on WAI-ARIA roles.
That said, this is what I think it could also be used for:
I try to update the code whenever a new version of these specs becomes a
recommendation.
document
.