Sugeriría que no use las soluciones que usan un <span>
contenedor porque no es HTML válido, lo que podría causar problemas en el futuro. Creo que la solución preferida es eliminar las opciones que desee ocultar y restaurarlas según sea necesario. Con jQuery, solo necesitará estas 3 funciones:
La primera función guardará el contenido original de la selección . Para estar seguro, es posible que desee llamar a esta función cuando cargue la página.
function setOriginalSelect ($select) {
if ($select.data("originalHTML") == undefined) {
$select.data("originalHTML", $select.html());
} // If it's already there, don't re-set it
}
Esta siguiente función llama a la función anterior para asegurarse de que el contenido original se haya guardado y luego simplemente elimina las opciones del DOM.
function removeOptions ($select, $options) {
setOriginalSelect($select);
$options.remove();
}
La última función se puede utilizar siempre que desee "restablecer" todas las opciones originales.
function restoreOptions ($select) {
var ogHTML = $select.data("originalHTML");
if (ogHTML != undefined) {
$select.html(ogHTML);
}
}
Tenga en cuenta que todas estas funciones esperan que esté pasando elementos de jQuery. Por ejemplo:
// 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
Aquí hay un ejemplo de trabajo: http://jsfiddle.net/9CYjy/23/