JavaScript Element ariaActiveDescendantElement Property
Beginner
⏱️ 12 min read
📚 Updated: Jul 2026
🎯 5 Examples
🚀 5 Try-it labs
Baseline 2025
Instance property
Overview
What You’ll Learn
Element.ariaActiveDescendantElement is an instance property that points to the current active descendant for widgets like listboxes and comboboxes. Learn how it relates to aria-activedescendant, why you can skip giving the target an id, how get/set reflection works, and how to feature-detect—with five examples and try-it labs.
01
Kind
Instance property
02
Returns
HTMLElement | null
03
Writable
Yes (get / set)
04
Reflects
aria-activedescendant
05
Status
Baseline 2025
06
Use for
Composite widgets
Fundamentals
Introduction
In many ARIA widgets, keyboard focus stays on a container (for example a listbox) while a child option is the “active” one announced to assistive technology. The classic way to express that is the aria-activedescendant attribute with an id string.
ariaActiveDescendantElement is the modern element reference form of the same idea: you assign (or read) a real DOM element instead of managing unique ids. MDN: unlike the attribute, the assigned element does not have to have an id.
Think: “focus is on the widget; the active descendant is which option is highlighted.” That is what screen readers need for many listbox patterns.
Concept
Understanding the Property
MDN: the ariaActiveDescendantElement property of the Element interface represents the current active element when focus is on a composite widget, combobox, textbox, group, or application.
Get / set — read the active descendant, or assign one (or null).
Flexible alternative to the aria-activedescendant attribute.
No id required on the target when you set the property.
Reflection — reads valid in-scope id refs from the attribute; setting the property clears the attribute.
Foundation
📝 Syntax
JavaScript
ariaActiveDescendantElement
Value
A subclass of HTMLElement that represents the active descendant, or null if there is no active descendant.
Compare
⚖️ Property vs aria-activedescendant Attribute
Attribute
Property
API
aria-activedescendant="id"
el.ariaActiveDescendantElement
Points to
Id string
Element object
Target needs id?
Yes
No (when set via property)
After you set the property
—
Corresponding attribute is cleared (MDN)
MDN: the property reflects the attribute when it is defined, but only for reference id values that match valid in-scope elements.
Pattern
📋 MDN Listbox Shape
MDN’s example uses a role="listbox" container with aria-activedescendant pointing at an option id:
if ("ariaActiveDescendantElement" in Element.prototype) {
console.log("ariaActiveDescendantElement is supported");
} else {
console.log("ariaActiveDescendantElement not supported by browser");
}
Element.ariaActiveDescendantElement is Baseline 2025 (newly available since April 2025). Feature-detect on older engines and keep an aria-activedescendant id fallback if needed. Logos use the shared browser-image-sprite.png sprite from this project.
✓ Baseline 2025
Element.ariaActiveDescendantElement
HTMLElement or null — reflected aria-activedescendant element reference.
BaselineNewly available 2025
Google ChromeSupported in current releases — feature-detect older
Yes
Microsoft EdgeSupported in current releases — feature-detect older
Yes
Mozilla FirefoxSupported in current releases — feature-detect older
Yes
Apple SafariSupported in current releases — feature-detect older
Yes
OperaFollow Chromium support
Yes
Internet ExplorerNot supported — use aria-activedescendant attribute
No
ariaActiveDescendantElementBaseline
Bottom line: Detect "ariaActiveDescendantElement" in Element.prototype. Prefer element assignment for dynamic widgets. Fall back to aria-activedescendant ids when the property is missing.
Wrap Up
Conclusion
ariaActiveDescendantElement lets you manage the active option of a composite widget with a real Element reference instead of only id strings. Feature-detect on older browsers, and keep accessibility behavior correct whether you use the property or the classic attribute.
Feature-detect before reading or writing the property
Update the property when keyboard highlight moves
Keep correct roles (listbox, options, etc.)
Use element refs when generating many dynamic options
Test with a screen reader for your widget pattern
❌ Don’t
Assume every older browser has the property
Forget a fallback to aria-activedescendant ids when needed
Point at an out-of-scope element and expect reflection to work
Skip ARIA roles and keyboard behavior for the widget
Confuse DOM focus with the active descendant relationship
Summary
Key Takeaways
Knowledge Unlocked
Five things to remember about ariaActiveDescendantElement
Reflected Element reference for aria-activedescendant.
5
Core concepts
📄01
Get / set
on Element
Kind
🎨02
HTMLElement
or null
Value
🔗03
No id needed
when set via JS
Benefit
✅04
Baseline 2025
newly available
Status
🎯05
Fallback
attribute ids
Compat
❓ Frequently Asked Questions
An HTMLElement (subclass) that is the current active descendant for a composite widget, or null if there is none.
No. MDN marks it Baseline 2025 (newly available since April 2025). It is not Deprecated, Experimental, or Non-standard. Older browsers may still lack it—feature-detect.
The attribute uses an id string. The property uses a live Element reference. The referenced element does not need an id. Setting the property clears the corresponding attribute.
For listboxes, comboboxes, and similar widgets where focus stays on a container while a child option is the “active” one for assistive tech.
Yes. Assign an Element (or null). MDN: if you set the property, the aria-activedescendant attribute is cleared.
Yes. Custom elements can use ElementInternals.ariaActiveDescendantElement for the same relationship from inside a component.
Did you know?
Reflected element references were designed partly for Shadow DOM: classic idrefs cannot cross shadow boundaries, but assigning ariaActiveDescendantElement can still connect a host control to an option inside a shadow tree when the platform supports it.