2016-09-23 2 views
0

J'essaie de créer une recherche en direct avec des mots clés jQuery et séparés par des virgules. Si je ne prends que la chaîne complète de texte-champ comme mot-clé, la recherche fonctionne comme un charme.jQuery recherche en temps réel avec des mots-clés séparés par des virgules

code (travail pour seul mot-clé):

jQuery("#artikelfilter").keyup(function(){ 

    // Retrieve the input field text and reset the count to zero 
    var filter = jQuery(this).val(), count = 0; 

    // Loop through the comment list 
    jQuery("#liste-alles li").each(function(){ 

     // If the list item does not contain the text phrase fade it out 
     if (jQuery(this).text().search(new RegExp(filter, "i")) < 0) { 
      jQuery(this).fadeOut(); 

     // Show the list item if the phrase matches and increase the count by 1 
     } else { 
      jQuery(this).show(); 
      count++; 
     } 
    }); 

    // Update the count 
    var numberItems = count; 
    jQuery("#filter-count").text("Number of Comments = "+count); 
}); 

Ce que je suis en train de faire maintenant, est de filtrer avec plusieurs mots-clés. J'ai pensé diviser la chaîne en un tableau et faire une boucle sur les mots-clés. Le problème est que je reçois beaucoup d'événements jQuery, donc le navigateur ne peut plus le gérer.

Y a-t-il une façon intelligente de faire fonctionner ce système?

Le code pour plusieurs mots-clés (ne fonctionne pas):

jQuery("#artikelfilter").keyup(function(){ 

    // Retrieve the input field text and reset the count to zero 
    var string_filter = jQuery(this).val(); 
    var array_filter = string_filter.split(','); 

    // Loop through the comment list 
    jQuery("#liste-alles li").each(function(){ 

     jQuery.each(array_filter, function(intValue, currentFilter) { 
      // If the list item does not contain the text phrase fade it out 
      if (jQuery(this).text().search(new RegExp(filter, "i")) < 0) { 
       jQuery(this).fadeOut(); 

      // Show the list item if the phrase matches and increase the count by 1 
      } else { 
       jQuery(this).show(); 
      } 
     }); 

    }); 

}); 

Merci!

Répondre

1

Essayez cette

jQuery.each(array_filter, function(intValue, currentFilter) { 
    jQuery("#liste-alles li:contains("+currentFilter +")").show(); 
    jQuery("#liste-alles li:not(:contains("+currentFilter +"))").fadeOut(); 

}); 

ou cette

var regex = new RegExp(filter, "i")); 

jQuery.each(array_filter, function(intValue, currentFilter) { 

    jQuery("#liste-alles li").filter(function() {return regex.test($(this).text()); }).show(); 
    jQuery("#liste-alles li").filter(function() {return !regex.test($(this).text()); }).fadeOut(); 

}); 
+0

Celui-ci fonctionne parfaitement! Merci beaucoup. Maintenant, il scintille un peu quand je tape. Savez-vous comment je peux faire fonctionner la fonction du clavier avec un retard? Cela rendrait le tout un peu plus lisse ... :) – David

+0

Bienvenue :) Laissez-moi réfléchir et je vais mettre à jour la réponse –

+0

Ça sonne bien! Merci beaucoup! :) – David