jQuery fornisce già l'utility contains()
per eseguire ricerche testuali all'interno degli elementi. Tuttavia, qualora volessimo effettuare ricerche ricorsive anche sugli elementi discendenti, questo metodo non è sufficiente. Vediamo una soluzione alternativa.
Possiamo implementare questo plugin:
(function($) {
$.fn.egrep = function(pat) {
var out = [];
var textNodes = function(n) {
if (n.nodeType == 3) {
var t = typeof pat == 'string' ?
n.nodeValue.indexOf(pat) != -1 :
pat.test(n.nodeValue);
if (t) {
out.push(n.parentNode);
}
}
else {
$.each(n.childNodes, function(a, b) {
textNodes(b);
});
}
};
this.each(function() {
textNodes(this);
});
return out;
};
})(jQuery);
Come si può notare, il plugin chiama ricorsivamente la funzione textNodes()
per effettuare il parsing degli elementi discendenti. Ecco un esempio pratico:
$(function() {
var $match = $('body').egrep('Test');
$($match).addClass('find');
});
Potete visionare l'esempio finale in questa pagina.