У меня есть несколько пользовательских переключателей, которые сильно вложены. Я хотел бы, чтобы дочерние радиокнопки ссылались на своих родителей в ярлыке (по причинам доступности). Я планирую использовать aria-labelledby
для этого.
Моя самая большая проблема заключалась в том, что переключатели генерируются динамически, поэтому я должен иметь возможность выяснить, что такое родительский идентификатор.
В настоящее время макет HTML выглядит следующим образом. :
<div ...
<input id="cat" name="level-parent" type="radio" value="cat" />
<label for="cat" />
<div>
<div ...
<div ...
<div
<div ...
<input name="level-child-0" id=
leash" type="radio" value="leash">
<label />
<div ...
<div ...
<div ...
<input name="level-child-1" id=
"blue" type="radio" value="blue">
<label />
Все входы и метки генерируются одним и тем же компонентом, который отображается на карту.
<input
type="radio"
name={`level-${level}`}
value={choiceId}
id={choiceId}
aria-labelledby={}
/>
<label htmlFor={choiceId} />
Идентификатор выбора и уровень передаются при создании переключателей.
Я хочу, чтобы каждый дочерний элемент ссылался на своего родителя, когда читатель экрана читает метку.
Таким образом, для тега <input>
с id="level-child-1"
было бы сказано «поводок, синий», а для тега <input>
с id="level-child-0"
было бы сказано «кошка, поводок»
Есть ли способ получить родительский идентификатор ввода? Я искал что-то вроде const parentInput = document.getElementById("label").parentNode.nodeName;
, но проблема в том, что я не знаю идентификатор родителя. Может ли он идти вверх по узлам, пока не найдет идентификатор родительского компонента input
?
Вот базовый jsfiddle с рабочим вложенным переключателем: http://jsfiddle.net/wgoLxanc/, так что я, по крайней мере, понял концепцию. Сложно выяснить, как получить родительский идентификатор.