Я не уверен, почему вы пытаетесь переопределить метод i
on при каждом нажатии клавиши на клавиатуре. Тем не менее, я предполагаю, что это желаемый эффект, так как вы не упоминаете об этом в своем вопросе.
Тем не менее, есть кое-что, что поможет вам приблизиться к вашей цели - ванильной JS версии кода.
В ответе используется оператор распространения для преобразования nodeList, полученного из getElementsByTagName
, в массив, а затем forEach () в l oop через массив Предметы. Для каждого элемента мы добавляем два прослушивателя событий. один для focus
и один для blur
.
Когда мы сфокусированы, мы добавляем атрибут. Когда размыто мы удаляем атрибут. Я выбрал установить атрибут и удалить атрибут , но вы также можете использовать набор данных , если хотите.
Чтобы определить, что i
( метод), я использовал let и троичный оператор .
Я до сих пор не уверен, почему вы хотите переопределить метод, когда клавиша нажата на клавиатура, поэтому я оставил это. Я могу улучшить это, если вы дадите мне знать, каков желаемый эффект.
let i = ("ontouchstart" in window) ? "touch" : "mouse";
document.addEventListener("keydown", () => {
i = "keyboard"
})
const links = [...document.getElementsByTagName("a")];
links.forEach(link => {
link.addEventListener("focus", () => {
link.setAttribute('data-focus-method', i);
});
link.addEventListener("blur", () => {
link.removeAttribute('data-focus-method');
})
})
<a href="#">My link 1</a>
<a href="#">My link 2</a>
<a href="#">My link 3</a>