L'obtention de l'élément le plus proche par id
-
09-06-2019 - |
Question
J'ai deux éléments:
<input a>
<input b onclick="...">
Lorsque b est cliqué, je veux accéder à un et de manipuler certaines de ses données.A n'A pas de nom unique à l'échelle mondiale, de sorte document.getElementsByName est sorti.La recherche dans l'objet de l'événement, j'ai pensé de l'événement.cible.parentNode aurait certaines fonctions comme la getElementsByName, mais cela ne semble pas être le cas avec <td>s.Est-il un moyen simple de faire cela?
La solution
Si a
et b
sont à côté les uns des autres et ont le même parent, vous pouvez utiliser le prevSibling
propriété de b
pour trouver a
.
Autres conseils
Vous devriez être capable de trouver l'élément qui a été cliqué à partir de la objet de l'événement.Selon votre navigateur, vous pourriez vouloir
e.target
oue.srcElement
.Le code ci-dessous est à partir de cette w3schools exemple: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."); }
Vous pouvez ensuite utiliser la
nextSibling
etprevSibling
DOM traversée de fonctions. Plus d'information ici.Et encore une fois un w3schools de référence pour Les Nœuds DOM XML.
Prototype a aussi des fonctions très pratiques pour se déplacer dans les DOM.Dans votre exemple, quelque chose comme ferait l'affaire:
b.up().down('a')
Et si il y a plus d'un élément à ce niveau, vous avez le pouvoir de sélecteurs CSS à votre main pour indiquer exactement où l'élément que vous souhaitez
Laissez votre plain vanilla JavaScript derrière.Obtenir JQuery--il vous permettra d'économiser une tonne de temps.