Obtenir les éléments HTML contenant un texte spécifique avec JavaScript
Concept et utilisation
La fonction elWithText()
permet d'obtenir une liste des éléments HTML qui contiennent une chaine de caractères spécifique.
Fonction
elWithText()
- Syntaxe
elWithText(texte, elements);
- Paramètres
texte
(String / RegExp)Le paramètre
texte
de la fonctionelWithText()
définit le texte à chercher dans les éléments.
Le texte peut être une chaine de caractères (sensible à la casse) ou une expression régulière.elements
(Node / Nodelist / Array)Le paramètre
elements
de la fonctionelWithText()
définit le ou les élément(s) à traverser pour lister ceux qui - parmi eux ou leur descendants - contiennent un texte spécifique.
Si ce paramètre est omis, le document sera traversé en entier par défaut.
Exemple d'obtention d'éléments avec un texte spécifique
var texte = 'texte 2';
var elements = document.createElement('DIV');
elements.innerHTML = '<p id="p_1">test 1</p>';
elements.innerHTML+= '<p id="p_2">test 2</p>';
elWithText(texte, elements);
// renvoie : [p#p_2]
Code source de la fonction
function elWithText(a, b) {
b = b || document.body;
var c = [],
d = function(n) {
if (n.nodeType === Node.TEXT_NODE) {
var v = n.nodeValue.replace(new RegExp('[\r\n ' + String.fromCharCode(160) + '' + String.fromCharCode(9) +']+'), '').trim();
if (v !== '' && n.nodeValue.match(a)) {
if (c.indexOf(n.parentNode) === -1) {
c.push(n.parentNode);
}
}
}
else if ((n.nodeType === Node.ELEMENT_NODE && !n.nodeName.match(/^(SCRIPT|STYLE)$/)) || n.nodeType === Node.DOCUMENT_NODE) {
if (n.childNodes) {
var j = n.childNodes.length;
for (var i = 0; i < j; i++) {
d(n.childNodes[i]);
}
}
}
};
if (b.length) {
b.forEach(d);
} else {
d(b);
}
return c;
}
Dernière mise à jour le .