Sugerowałbym, abyś nie korzystał z rozwiązań wykorzystujących rozszerzenie<span> opakowanie, ponieważ nie jest to prawidłowy HTML, co może powodować problemy w . Myślę, że preferowanym rozwiązaniem jest faktycznie usunięcie wszystkich opcji, które chcesz ukryć, i przywrócenie ich w razie potrzeby. Korzystając z jQuery, będziesz potrzebować tylko tych 3 funkcji:
Pierwsza funkcja zapisze oryginalną zawartość pliku zaznaczenia . Dla pewności możesz chcieć wywołać tę funkcję podczas ładowania strony.
function setOriginalSelect ($select) {
if ($select.data("originalHTML") == undefined) {
$select.data("originalHTML", $select.html());
} // If it's already there, don't re-set it
}
Ta następna funkcja wywołuje powyższą funkcję, aby upewnić się, że oryginalna zawartość została zapisana, a następnie po prostu usuwa opcje z DOM.
function removeOptions ($select, $options) {
setOriginalSelect($select);
$options.remove();
}
Ostatnia funkcja może być używana, gdy chcesz „zresetować” z powrotem do wszystkich oryginalnych opcji.
function restoreOptions ($select) {
var ogHTML = $select.data("originalHTML");
if (ogHTML != undefined) {
$select.html(ogHTML);
}
}
Zauważ, że wszystkie te funkcje oczekują, że przekazujesz elementy jQuery. Na przykład:
// 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
Oto działający przykład: http://jsfiddle.net/9CYjy/23/