Comment obtenir le nœud parent d'un élément lorsque le parent a des frères et sœurs?
Veuillez jeter un oeil à l'extrait de code ci-dessous:
<div>
<div></div>
<div><!-- my target node -->
<div><!-- not my target node -->
<img /><!-- my source node -->
</div>
</div>
</div>
Comme vous pouvez le voir le img
-elment a deux enfermant div
s. Je veux que la première de ces deux enfermant div
s être considéré comme le "vrai" parent (celui que j'ai besoin de trouver) de la img
-elment parce qu'il a un frère div
avant de sorte que la recherche se termine et le frère div
et l'extérieur en joignant div
sont ignorés.
Dans le cas où il n'y a pas de frères et sœurs, à tous, à l'extérieur div
doit être donné; dans le cas où l'élément n'est pas fermé, l'élément lui-même doit être donné.
J'aimerais juste savoir comment cibler l'élément comme je l'ai expliqué via JavaScript.
element.parentNode
? developer.mozilla.org/en-US/docs/DOM/Node.parentNode- dom, des éléments ne jamais avoir un seul parent. Obtenez de l'img nœud, et vous pouvez trivialement obtenir de son parent avec
.parentNode
. en fait, vous pouvez utiliser .parentNode de suivre un nœud branche tout le chemin jusqu'à la racine de l'arbre. - Si vous avez des questions concernant les DOM structure, alors s'il vous plaît format HTML, de sorte que la structure est facilement reconnaissable. Merci!!!!
- J'ai besoin de trouver le parent qui a des frères (ou a corps comme sa mère). Il suffit donc de la première des deux joignant les divs pour l'img est convenable pour moi, parce que la deuxième (de l'intérieur) n'a pas de frères, de sorte qu'il n'est pas utile pour moi.
Vous devez vous connecter pour publier un commentaire.
Donc, il sonne comme vous voulez le premier ancêtre qui a des frères et sœurs éléments. Si oui, vous pouvez le faire comme ceci:
Ou plus exactement peut-être écrit comme une
do-while
boucle:De sorte que la boucle se termine quand il en trouve un avec au moins un enfant de l'élément, ou quand il manque des ancêtres.
Si vous savez si l'enfant vient avant ou après le parent, vous pouvez tester la qualité de l'un ou de l'autre.
Notez également que vous aurez besoin d'une cale d'épaisseur pour le
***ElementSibling
propriétés si vous êtes à soutenir les anciens navigateurs.Vous pouvez faire une fonction qui va le faire:
Ensuite utiliser les fonctions comme ceci:
nextSibling
au lieu denextElementSibling
, alors que les espaces nœud de texte aurait compté comme un frère ou une sœur.Si vous ne savez pas combien de niveaux de l'élément parent est, il sera difficile de le sélectionner à l'aide de méthodes comme le
element.getParent
seul. Cependant, vous POUVEZ parcourir les nœuds parents jusqu'à ce que le nœud que vous êtes en train de regarder a des frères et sœurs et est l'enfant d'unbody
élément. Supposons que votreimg
balise est appelée parimgNode
.Dans le code ci-dessus, nous nous sommes progressivement itérer à travers les parents de l'image nœud. À chaque itération, nous vérifions si le nœud actuel (un parent de la
img
nœud) a un frère ou une sœur et est l'enfant d'unbody
tag.n.parentNode.tagName == 'body'
: Pourquoi avez-vous besoin du parent de l'élément requis pour êtrebody
?.nextSibling
seul à la recherche pour les éléments frères. Il y aura des nœuds de texte sur chaque côté de tout élément qui comprend des espaces de formatage (onglet et les caractères de saut de ligne), et.nextSibling
comprennent les.Juste au cas où vous êtes curieux, voici comment vous pourriez mettre en œuvre user1689607 réponse à l'aide de jQuery.
Si il est logique d'utiliser cette bibliothèque pour vos besoins dépend beaucoup du contexte, nous n'avons pas. Comme d'autres l'ont à juste titre souligné, vous n'avez pas besoin de jQuery pour résoudre ce problème, et il peut être inutilement poids lourd de la solution. Cela dit, il peut être très utile de la bibliothèque et il est certainement utile de votre compte si vous n'étiez pas conscients ou ne l'avais pas déjà penché sur la question.