Recherche d'id d'un element parent dans un document

Soyez le premier à donner votre avis sur cette source.

Vue 6 629 fois - Téléchargée 171 fois

Description

Une petite fonction recursive permettant de rechercher l'id d'un élément parent sur 1 ou plusieurs niveaux.

Source / Exemple :


/*
fonction getIdOf
objet: permet de récupérer l'id de n'importe quel élément parent
args:
    - tag: Nom de l'élément à récupérer
    - elt: élément source (this)
    - niv: niveau du parent à récupérer

  • /
function getIdOf(elt,tag,niv){ // On initialise le niveau à 1 si besoin est. (niv==undefined || niv<1)?niv=1:niv=niv; // Le document a été parcouru entièrement et aucune balise n'a été trouvée if (elt.parentNode.nodeName=="#document") return null; // Si la balise ne correspond pas on continue la recherche if (elt.parentNode.nodeName!=tag){ return getIdOf(elt.parentNode,tag,niv); // Si le nombre de niveaux demandé n'est pas atteint et qu'il reste des balises correspondantes on continue } else if (niv!=1 && elt.parentNode.parentNode.nodeName==tag){ return getIdOf(elt.parentNode,tag,niv-=1); // Sinon on renvoie l'id de la balise correspondante } else { return elt.parentNode.id; } }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Palleas_44
Messages postés
131
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 avril 2009
-
Personnelement je n'aurais pas utilisé une fonction récursive, mais après c'est libre à l'appreciation de chacun je pense ;)
jsgorre
Messages postés
4
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 octobre 2008
-
Merci pour ton commentaire. Par curiosité quelle solution aurait tu choisi ?
Palleas_44
Messages postés
131
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 avril 2009
-
J'ai un peu de mal à faire du js en ce moment, mais un while plutôt qu'une fonction récursive :

function getParentId(child,tag) {
var parent = child.parentNode; while(parent.tagName !tag) parent parent.parentNode;
return parent.getAttribute("id");
}

Bon après j'ai pas testé et c'est optimisable, mais dans l'idée voilà =)
jsgorre
Messages postés
4
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 octobre 2008
-
Effectivement l'ecriture est plus simple dans ce cas. Mais en ajoutant la gestion des niveaux et le parcours complet du document, ça me semble moins clair à mettre en place.
Je trouve que la recursivité apporte plus de clarté au code.
Mais bon ca permet de voir différentes manières de penser. :-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.