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()

Retourne une liste des éléments contenant un texte spécifique.

Syntaxe
elWithText(texte, elements);
Paramètres
texte(String / RegExp)

Le paramètre texte de la fonction elWithText() 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 fonction elWithText() 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;
}
^