Je vous présente 4 fonctions javascript que vous pourriez ajouter à votre librairie javascript personnelle. Elles ont pour but de compléter les méthodes relationnelles d’un élément sélectionnés via DOM.
En tant que programmeur javascript on est régulièrement amené à déterminer l’élément qui suit ou qui précède l’élément que l’on a sélectionné. Pour se faire le DOM Core Level I nous permet de déterminer ces éléments en utilisant 2 méthodes previousSibling et nextSibling. Le seul problème avec ces 2 méthodes est qu’en DOM les espaces sont considérés comme étant des élément à part entière. Du coup l’utilisation de ces 2 méthodes est rendu quasi inutile car ce que l’on recherche la plupart du temps c’est le prochain élément et non les espaces blancs qui l’entoure 😉 .Pour contourner se problème j’ai écrit 2 fonctions que j’utilise de manière fréquentes et qui réponde à ce problème. La fonction getNextNode qui détermine l’élément, le tag qui suit :
function getNextNode(el) {
var node = null;
if (el.nextSibling) {
node = el;
do {
node = node.nextSibling;
}
while (node.nodeType !== 1 && node.nextSibling);
}
return (node.nodeType === 1) ? node : null;
};
Et la fonction getPreviousNode qui détermine l’élèment qui précède l’élément/tag détecté.
function getPreviousNode(el) {
var node = null;
if( el.previousSibling) {
node = el;
do {
node = node.previousSibling;
} while (node.nodeType !== 1 && node.previousSibling);
}
return (node.nodeType === 1) ? node : null;
};
Notez, que si aucun élément n’est trouvé, ces 2 fonctions retournent null. Et voilà avec ces 2 petites fonctions il vous sera très facile de connaître l’élèment suivant ou précédent votre tag. De plus en y réfléchissant bien et sur base de ces 2 fonctions on peut facilement ajouter 2 autres fonctions tous aussi utiles getFirstNode pour déterminer la première balise d’un élément :
function getFirstNode(el) {
var node = null;
if (el.hasChildNodes()) {
node = el.firstChild;
if (node.nodeType !== 1) {
node = getNextNode(node);
}
}
return node;
}
et getLastNode pour déterminer le dernier élément d’une balise et voila :
function getLastNode(el) {
var node = null;
if (el.hasChildNodes()) {
node = el.lastChild;
if (node.nodeType !== 1) {
node = getPreviousNode(node);
}
}
return node;
}
Y a-t-il des informations sur ce sujet dans d’autres langues ?