Zdałem sobie sprawę, że wydaje się, że Chrome nie pozwoli mi ukryć się <option>
w pliku <select>
. Firefox to zrobi.
Muszę ukryć te, <option>
które pasują do kryteriów wyszukiwania. W narzędziach internetowych Chrome widzę, że są one poprawnie ustawiane display: none;
przez mój JavaScript, ale po <select>
kliknięciu menu są wyświetlane.
Jak mogę sprawić, aby te, <option>
które pasują do moich kryteriów wyszukiwania, NIE były wyświetlane po kliknięciu menu? Dzięki!
javascript
jquery
css
dom
Jesse Atkinson
źródło
źródło
Odpowiedzi:
Musisz zaimplementować dwie metody ukrywania.
display: none
działa dla FF, ale nie Chrome czy IE. Więc drugą metodą jest zawijanie<option>
w a<span>
withdisplay: none
. FF tego nie zrobi (technicznie nieprawidłowy HTML, zgodnie ze specyfikacją), ale Chrome i IE to zrobią i ukryją opcję.EDYCJA: O tak, już to zaimplementowałem w jQuery:
EDYCJA 2: Oto jak możesz użyć tej funkcji:
EDYCJA 3: Dodano dodatkowe sprawdzenie sugerowane przez @ user1521986
źródło
<select>
(przy użyciu jQuery.val()
) zwrócinull
. Właśnie przetestowałem to w Chrome 29, więc Googlersi uważajcie!W przypadku HTML5 możesz użyć atrybutu „ukryty”.
To jest nie obsługiwane przez IE <11. Ale jeśli potrzebujesz tylko ukryć kilka elementów, może byłoby lepiej po prostu ustawić atrybut ukryty w połączeniu z przyjaznym niepełnosprawnym w porównaniu do dodawania / usuwania elementów lub nie robi semantycznie poprawne konstrukcje.
Odniesienie .
źródło
disabled
tak, aby przeglądarki, które nie obsługują globalnegohidden
atrybutu HTML5 , miały pewne wizualne wskazania dla użytkownika.<option hidden disabled>
, więc ukrywa się we wszystkich dobrych przeglądarkach i wyłącza je w innych.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.
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.
Ostatnia funkcja może być używana, gdy chcesz „zresetować” z powrotem do wszystkich oryginalnych opcji.
Zauważ, że wszystkie te funkcje oczekują, że przekazujesz elementy jQuery. Na przykład:
Oto działający przykład: http://jsfiddle.net/9CYjy/23/
źródło
var value=$select.val(); $select.html(ogHTML); $select.val(value);
aby zachować wybraną wartość nawet po przywróceniu.Odpowiedź Ryana P powinna zostać zmieniona na:
W przeciwnym razie zostanie opakowany w zbyt wiele tagów
źródło
<select>
powinien zawierać tylko elementy obsługujące skrypty<option>
lub<optgroup>
lub. Dlatego należy unikać używania nieprawidłowych<span>
opakowań.Funkcja toggleOption nie jest doskonała i wprowadziła nieprzyjemne błędy w mojej aplikacji. jQuery będzie mylony z .val () i .arraySerialize () Spróbuj wybrać opcje 4 i 5, aby zobaczyć, o co mi chodzi:
źródło
W ten sposób wybieranie danych wejściowych jest trudne. A co z wyłączeniem go zamiast tego, zadziała to w różnych przeglądarkach:
Spowoduje to wyłączenie wszystkich
<option>
elementów, ale możesz wybrać dowolny, który chcesz.Oto demo: http://jsfiddle.net/jYWrH/
Uwaga: Jeśli chcesz usunąć wyłączoną właściwość elementu, możesz użyć
.removeProp('disabled')
.Aktualizacja
Możesz zapisać
<option>
elementy, które chcesz ukryć w ukrytym elemencie wyboru:Następnie możesz dodać
<option>
elementy z powrotem do oryginalnego elementu select:W tych dwóch przykładach oczekuje się, że widoczny element select ma identyfikator,
visible
a ukryty element select ma identyfikatorhidden
.Oto demo: http://jsfiddle.net/jYWrH/1/
Zauważ, że
.on()
jest to nowość w jQuery 1.7, a użycie tej odpowiedzi jest takie samo, jak.bind()
: http://api.jquery.com/onźródło
Prosta odpowiedź: nie możesz. Elementy formy mają bardzo ograniczone możliwości stylizacji.
Najlepszą alternatywą byłoby ustawienie
disabled=true
opcji (i być może szarego koloru, ponieważ tylko IE robi to automatycznie), co spowoduje, że opcja będzie niemożliwa do kliknięcia.Alternatywnie, jeśli możesz, całkowicie usuń
option
element.źródło
źródło
Ponieważ używasz już JS, możesz utworzyć ukryty element SELECT na stronie i dla każdego elementu, który próbujesz ukryć na tej liście, przenieść go na listę ukrytą. W ten sposób można je łatwo przywrócić.
Nie znam sposobu na zrobienie tego w czystym CSS ... Myślałem, że display: żadna sztuczka by nie zadziałała.
źródło
!!! OSTRZEŻENIE !!!
Zamień drugie „JEŚLI” na „GDY” lub nie działa!
źródło
Powinieneś je usunąć z
<select>
using JavaScript. To jedyny gwarantowany sposób, aby odejść.źródło
$('options').remove();
ten wydaje się działać dla mnie w chrome
źródło
Spóźniona gra, ale większość z nich wydaje się dość skomplikowana.
Oto jak to zrobiłem:
znaczniki select-1:
znaczniki select-2:
źródło