Suggerirei di non utilizzare le soluzioni che utilizzano un <span>wrapper perché non è HTML valido, il che potrebbe causare problemi lungo la strada. Penso che la soluzione preferita sia rimuovere effettivamente tutte le opzioni che desideri nascondere e ripristinarle secondo necessità. Usando jQuery, avrai solo bisogno di queste 3 funzioni:
La prima funzione salverà il contenuto originale della selezione . Per sicurezza, potresti voler chiamare questa funzione quando carichi la pagina.
function setOriginalSelect ($select) {
if ($select.data("originalHTML") == undefined) {
$select.data("originalHTML", $select.html());
} // If it's already there, don't re-set it
}
La prossima funzione chiama la funzione precedente per assicurarsi che i contenuti originali siano stati salvati e quindi rimuove semplicemente le opzioni dal DOM.
function removeOptions ($select, $options) {
setOriginalSelect($select);
$options.remove();
}
L'ultima funzione può essere utilizzata ogni volta che si desidera "ripristinare" tutte le opzioni originali.
function restoreOptions ($select) {
var ogHTML = $select.data("originalHTML");
if (ogHTML != undefined) {
$select.html(ogHTML);
}
}
Nota che tutte queste funzioni si aspettano che tu stia passando elementi jQuery. Per esempio:
// 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
Ecco un esempio funzionante: http://jsfiddle.net/9CYjy/23/