Bonsoir à tous,
Je viens de m'inscrire à ce forum parce que je rencontre un problème vraiment étrange, et je pense que d'autres se sont probablement déjà confronté à ce type d'anomalies.
Je cherche à faire une fonction JS qui parcourt récursivement les éléments parents de l'élément passé en premier argument, jusqu'à ce qu'on trouve un élément parent qui réponde aux caractéristiques définies dans l'objet passé en second argument de la fonction.
Voici le code :
Ensuite il me reste à l'appeler, voici un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function getParent(el, Identificateur) { for (var type in Identificateur) var bool = (el.parentNode[type] ? (el.parentNode[type] == Identificateur[type]) : false); if(!bool) getParent(el.parentNode, Identificateur); else return el.parentNode; }
Normalement, ce code devrait afficher une alerte JS "item1", puisque je lui demande d'afficher l'id de l'élément parent de l'élément "a" dont la classe est définie à "item".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 function test(el) { var it = getParent(el, { className:"item" }); alert(it.id); } <div class="item" id="item1"> <div><p><span><a href="#" onclick="test(this);">test link</a></span></p></div> </div>
Eh bien ce n'est pas le cas.
Et pourtant, si au lieu de retourner l'élément parent, je le manipule dans la fonction, cela fonctionne... Ainsi le code suivant affiche bien une alerte "item1" :
La seule chose qui ait changé, c'est que je ne retourne plus l'élément, mais je le manipule dans la fonction en alertant la valeur de son id.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function getParent(el, Identificateur) { for (var type in Identificateur) var bool = (el.parentNode[type] ? (el.parentNode[type] == Identificateur[type]) : false); if(!bool) getParent(el.parentNode, Identificateur); else alert(el.parentNode.id); } function test(el) { getParent(el, { className:"item" }); } <div class="item" id="item1"> <div><p><span><a href="#" onclick="test(this);">test link</a></span></p></div> </div>
Ce que je ne comprends pas, c'est pourquoi je ne peux pas retourner cet élément, pour le manipuler en dehors de la fonction.
Si vous avez des idées pour me sortir de cette impasse, je suis preneur, parce que cela fait deux heures que je m'arrache les cheveux sur trois malheureuses lignes de code.... à devenir fou
Merci d'avance !
Partager