2010-07-27 12 views
22

Je me demande comment rendre la partie correspondante des suggestions de saisie semi-automatique en gras lors de l'utilisation de jquery ui autocomplete? Donc, par exemple, si vous tapez "ja" et que les suggestions sont javascript et java (comme dans l'exemple sur la page de démonstration jquery ui), alors je voudrais mettre "ja" gras dans les deux suggestions.Comment rendre le texte correspondant gras avec jquery ui autocomplete?

Quelqu'un sait comment faire cela?

Merci beaucoup pour l'aide ...

Répondre

41

Je ne sais pas pourquoi la saisie semi-automatique est donc d'os à nu par rapport aux autres fonctionnalités qu'il contient (par exemple largable, sortable, draggable etc.).

Il devrait vraiment vous offrir une option stylable, par ex. l'emballage avec <span class="ui-autocomplete-term">term</span> ou quelque chose de similaire.

Vous pouvez le faire comme this

Il devrait être assez explicite; sinon, donne-moi un cri.

+1

Oui, l'exemple est presque parfait, mais ça chamboule le style ... Si je remplace find ('li') avec find ('a') c'est tout bon. Merci beaucoup pour l'aide. :) – apolka

+0

Content de pouvoir vous aider, si vous le marquez comme la bonne réponse; S'il vous plaît, votez aussi. :-) – peol

+13

ignore-cas version http://jsfiddle.net/fozylet/kTAMm/ A obtenu l'idée de [ici] (http://stackoverflow.com/questions/957207/highlight-multiple-keywords-for-jquery- autocomplete) – fozylet

20

Voici une solution pour ceux qui veulent rechercher insensibles à la casse (seule la fonction ouverte est diffirent):

 open: function(e,ui) { 
      var 
      acData = $(this).data('autocomplete'); 

      acData 
      .menu 
      .element 
      .find('a') 
      .each(function() { 
       var me = $(this); 
       var regex = new RegExp(acData.term, "gi"); 
       me.html(me.text().replace(regex, function (matched) { 
        return termTemplate.replace('%s', matched); 
       })); 
      }); 
     } 
+2

- @ brechtvhb Est-ce votre réponse ou @ fozylet? Si @ fozylet pouvez-vous leur donner crédit? –

+0

Comment aurais-je basé ma réponse (23 avr 2011) sur la réponse de fozylet (18 jan 2012)? – brechtvhb

3

Dans jQuery UI 1.9.x cette solution ne fonctionnait pas pour moi car acData était indéfini - le timing de référence des données était erroné car j'init mon PluginHelper avant que le document ne soit prêt.

je suis venu de mod le _renderItem en utilisant l'usine widget jQuery UIs:

$.widget("custom.autocompleteHighlight", $.ui.autocomplete, { 
    _renderItem: function (ul, item) { 
     var regexp = new RegExp('(' + this.term + ')', 'gi'), 
      classString = this.options.HighlightClass ? ' class="' + this.options.highlightClass + '"' : '', 
      label = item.label.replace(regexp, '<span' + classString + '>$1</span>'); 

     return $('<li><a href="#">' + label + '</a></li>').appendTo(ul); 
    } 
}); 

Vous pouvez maintenant utiliser avec:

$('input.jsAutocompleteHighlight').autocompleteHighlight({ 
     highlightClass: 'ui-autocomplete-highlight' 
}); 

style CSS:

.ui-autocomplete-highlight { 
    font-weight: bold; 
} 
+0

Merci. B.t.w. il y a une faute de frappe dans le nom de votre classe: 'ui-autocomplete-hightlight' au lieu de 'ui-autocomplete-highlight' –

+0

Merci d'avoir signalé – redaxmedia

28

En jQuery UI 1.11.1, voici le code que j'ai utilisé pour le faire fonctionner (insensible à la casse):

open: function (e, ui) { 
    var acData = $(this).data('ui-autocomplete'); 
    acData 
    .menu 
    .element 
    .find('li') 
    .each(function() { 
     var me = $(this); 
     var keywords = acData.term.split(' ').join('|'); 
     me.text(me.text().replace(new RegExp("(" + keywords + ")", "gi"), '<b>$1</b>')); 
    }); 
} 
+3

En 2015, voici la réponse :) –

+3

Meilleure réponse. Solution simple –

+0

Aucun des autres n'a travaillé pour moi. Celui-ci a fait l'affaire! – Val