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

Soyez le premier à donner votre avis sur cette source.

Vue 7 209 fois - Téléchargée 190 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
jsgorre
Messages postés
4
Date d'inscription
lundi 29 janvier 2007
Statut
Membre
Dernière intervention
13 octobre 2008

13 oct. 2008 à 09:49
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. :-)
Palleas_44
Messages postés
130
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 avril 2009

12 oct. 2008 à 21:43
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

12 oct. 2008 à 21:38
Merci pour ton commentaire. Par curiosité quelle solution aurait tu choisi ?
Palleas_44
Messages postés
130
Date d'inscription
lundi 12 décembre 2005
Statut
Membre
Dernière intervention
19 avril 2009

11 oct. 2008 à 10:02
Personnelement je n'aurais pas utilisé une fonction récursive, mais après c'est libre à l'appreciation de chacun je pense ;)

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.