jQuery: ricerche full text ricorsive

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.

Torna su