Получение ближайшего элемента по идентификатору
-
09-06-2019 - |
Вопрос
У меня есть два элемента:
<input a>
<input b onclick="...">
Когда нажимается b, я хочу получить доступ к a и манипулировать некоторыми его данными.У A нет глобально уникального имени, поэтому document.getElementsByName отсутствует.Глядя на объект event, я подумал, что event.target.parentNode будет иметь некоторую функцию, подобную getElementsByName, но, похоже, это не так с <td>s.Есть ли какой-нибудь простой способ сделать это?
Решение
Если a
и b
находятся рядом друг с другом и имеют одного и того же родителя, вы можете использовать prevSibling
свойство b
чтобы найти a
.
Другие советы
Вы должны быть в состоянии найти элемент, на который был сделан щелчок из объект события.В зависимости от вашего браузера вы можете захотеть
e.target
илиe.srcElement
.Приведенный ниже код взят из этого пример w3schools:function whichElement(e) { var targ; if (!e) var e = window.event; if (e.target) { targ=e.target; } else if (e.srcElement) { targ = e.srcElement; } if (targ.nodeType==3) { // defeat Safari bug targ = targ.parentNode; } var tname; tname = targ.tagName; alert("You clicked on a " + tname + " element."); }
Затем вы можете использовать
nextSibling
иprevSibling
Функции обхода DOM. Еще немного информации здесь.И еще раз ссылка на w3schools для Узлы XML DOM.
Прототип также имеет приятные функции для перемещения по DOM.В вашем примере что-то вроде следующего сделало бы свое дело:
b.up().down('a')
И если на этом уровне имеется более одного элемента a, у вас под рукой есть возможности CSS-селекторов, чтобы точно указать, какой элемент вы хотите
Оставьте свой простой ванильный JavaScript позади.Получите jQuery - это сэкономит вам массу времени.