Czy istnieje wersja selektora : zawiera jQuery bez rozróżniania wielkości liter , czy też powinienem wykonać tę pracę ręcznie, zapętlając wszystkie elementy i porównując ich .text () z moim ciągiem?
javascript
jquery
jquery-selectors
Poklepać
źródło
źródło
Odpowiedzi:
To, co ostatecznie zrobiłem dla jQuery 1.2, to:
Spowoduje to rozszerzenie jquery tak, aby zawierał selektor: Zawiera selektor niewrażliwy na wielkość liter, selektor: zawiera niezmieniony.
Edycja: dla jQuery 1.3 (dzięki @ user95227) i później potrzebujesz
Edycja: najwyraźniej uzyskuje się bezpośredni dostęp do DOM za pomocą
zamiast
W poprzednim wyrażeniu znacznie go przyspiesza, więc jeśli problemem jest szybkość, spróbuj na własne ryzyko. (patrz @John „s pytanie )
Ostatnia edycja: dla jQuery 1.8 powinno to być:
źródło
Aby opcjonalnie nie rozróżniać wielkości liter: http://bugs.jquery.com/ticket/278
następnie użyj
:containsi
zamiast:contains
źródło
Od wersji jQuery 1.3 ta metoda jest przestarzała. Aby to zadziałało, musi być zdefiniowane jako funkcja:
źródło
Jeśli ktoś (taki jak ja) jest zainteresowany, co oznaczają a i m [3] w definicji Zawiera .
KLUCZ / LEGENDA: Parametry udostępnione przez jQuery do użycia w definicjach selektorów:
r = jQuery tablica badanych elementów. (np .: r.length = liczba elementów)
i = indeks aktualnie badanego elementu w tablicy r .
a = element obecnie analizowany. Instrukcja selektora musi zwracać wartość true, aby uwzględnić ją w dopasowanych wynikach.
m [2] = nodeName lub *, którego szukamy (po lewej od dwukropka).
m [3] = parametr przekazany do: selector (param). Zazwyczaj numer indeksu, jak w : nth-of-type (5) , lub ciąg znaków, jak w : color (blue) .
źródło
W jQuery 1.8 będziesz musiał użyć
źródło
Odmiana, która wydaje się działać nieco szybciej i która pozwala również na wyrażenia regularne, to:
Nie tylko nie jest rozróżniana wielkość liter, ale także umożliwia zaawansowane wyszukiwanie, takie jak:
$("p:containsCI('\\bup\\b')")
(Dopasowuje „Up” lub „up”, ale nie „Upper”, „Wakeup” itp.)$("p:containsCI('(?:Red|Blue) state')")
(Dopasowuje „stan czerwony” lub „stan niebieski”, ale nie „stan włączenia” itp.)$("p:containsCI('^\\s*Stocks?')")
(Dopasowuje „stock” lub „stocks”, ale tylko na początku akapitu (ignorując początkowe białe spacje).źródło
Może się spóźnić ... ale
Wolałbym iść tą drogą ...
W ten sposób NIE modyfikujesz NATIVE '.contains' jQuery ... Domyślny może być potrzebny później ... jeśli ktoś się przy nim manipuluje , możesz wrócić do stackOverFlow ...
źródło
Kod aktualizacji działa świetnie w wersji 1.3, ale słowo „zawiera” powinno być zapisane małą literą na pierwszej literze, w przeciwieństwie do poprzedniego przykładu.
źródło
:contains
i:Contains
działały jednocześnie.Zobacz poniżej, aby użyć „: zawiera”, aby znaleźć tekst ignorujący wielkość liter w kodzie HTML,
Możesz również użyć tego linku, aby znaleźć kod ignorujący wielkość liter na podstawie Twojej wersji jquery, Make jQuery: zawiera bez rozróżniania wielkości liter
źródło
Szybsza wersja korzystająca z wyrażeń regularnych.
źródło
Miałem podobny problem z niedziałającymi następującymi ...
Działa to bez konieczności przedłużania
To też działa, ale prawdopodobnie należy do kategorii „ręczne zapętlanie” ....
źródło
Nowa zmienna Nadaję jej nazwę subString i wstawiam ciąg, który chcesz wyszukać w tekście niektórych elementów. Następnie za pomocą selektora Jquery wybierz potrzebne elementy, takie jak mój przykład,
$("elementsYouNeed")
i filtruj według.filter()
. W.filter()
będzie porównać każdy element$("elementsYouNeed")
z funkcją.W funkcji używam również
.toLowerCase()
dla elementu tekstowego subString, który może uniknąć warunku uwzględniającego wielkość liter i sprawdzić, czy jest w nim podstring. Następnie.filter()
metoda konstruuje nowy obiekt jQuery z podzbioru pasujących elementów.Teraz możesz pobrać elementy dopasowania w matchObjects i robić, co chcesz.
źródło