jQuery: ricerche full text ricorsive

Una semplice implementazione jQuery di un plugin per la ricerca full text ricorsivo.

jQuery di Gabriele Romanato

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.

Commenti