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

Soyez le premier à donner votre avis sur cette source.

Vue 6 898 fois - Téléchargée 183 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
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. :-)
Messages postés
130
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à =)
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 ?
Messages postés
130
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 ;)

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.