Je vous suggère de ne pas utiliser les solutions qui utilisent un <span>
wrapper car ce n'est pas du HTML valide, ce qui pourrait causer des problèmes plus tard. Je pense que la solution préférée est de supprimer toutes les options que vous souhaitez masquer et de les restaurer si nécessaire. En utilisant jQuery, vous n'aurez besoin que de ces 3 fonctions:
La première fonction enregistrera le contenu original de la sélection . Pour plus de sécurité, vous pouvez appeler cette fonction lorsque vous chargez la page.
function setOriginalSelect ($select) {
if ($select.data("originalHTML") == undefined) {
$select.data("originalHTML", $select.html());
} // If it's already there, don't re-set it
}
Cette fonction suivante appelle la fonction ci-dessus pour s'assurer que le contenu d'origine a été enregistré, puis supprime simplement les options du DOM.
function removeOptions ($select, $options) {
setOriginalSelect($select);
$options.remove();
}
La dernière fonction peut être utilisée chaque fois que vous souhaitez "réinitialiser" toutes les options d'origine.
function restoreOptions ($select) {
var ogHTML = $select.data("originalHTML");
if (ogHTML != undefined) {
$select.html(ogHTML);
}
}
Notez que toutes ces fonctions s'attendent à ce que vous passiez des éléments jQuery. Par exemple:
// in your search function...
var $s = $('select.someClass');
var $optionsThatDontMatchYourSearch= $s.find('options.someOtherClass');
restoreOptions($s); // Make sure you're working with a full deck
removeOptions($s, $optionsThatDontMatchYourSearch); // remove options not needed
Voici un exemple de travail: http://jsfiddle.net/9CYjy/23/