Znajdź element html, którego identyfikator zaczyna się od

89

moje pytanie brzmi:

Mam kod HTML na wielu stronach, na każdej z nich użyłem JQgrid (siatka jquery) do wyświetlenia niektórych danych. Wiedziałem, że na każdej z tych stron element przechowujący JQgrid nosi nazwę „LIST_xxx”. Teraz muszę stworzyć javascript, który pobiera ten element „LIST_XXXX” na każdej stronie i wykonuje pewne czynności. Jak mogę wyszukać element według identyfikatora, ale znając tylko jego początkową część (jak wspomniałem wcześniej):

$('#list_[XXXX]')... --> The part surrounded by [] is variable on each page, i want to discriminate that.

Mam nadzieję, że wyraziłem się jasno. Dzięki.

lidermina
źródło

Odpowiedzi:

171

Próbować

$('div[id^="list_"]')

Powinno działać

Glen Little
źródło
Znacznie lepszy układ tego odniesienia niż dokumentacja jquery.
Yuriy Faktorovich
To działa dobrze, dzięki ... Użyłem go do znalezienia identyfikatora kończącego się określoną wartością, na przykład if ($ ('div [id $ = "' + val + '"]'). Length> 0) wykonaj coś;
raphie
dobrze, działa dobrze dla powyższych prostych identyfikatorów kontrolek. Jak sprawić, by działało w scenariuszach takich jak mam kontrolki z takimi identyfikatorami „txt_0_city”, „txt_1_city”, „txt_2_city”, „txt_3_city” i tak dalej, i chcę zliczać wszystkie takie elementy z identyfikatorami takimi jak „txt _ * _ city "
Rajiv Bhardwaj
@Rajiv jeśli masz kontrolę nad kodem HTML, dobrze byłoby dodać klasę typu „city” do każdego z tych elementów. Możesz je łatwo policzyć.
Glen Little
@Rajiv, jeśli nie możesz poprawić HTML, sprawdź api.jquery.com/multiple-attribute-selector - możesz łączyć selektory. Na przykład $ ("span [id ^ = 'txt _'] [id $ = '_ city']")
Glen Little
22

Musisz użyć atrybutu zaczynającego się od selector , na przykład:

$('[id^=list_]').whatever()
SLaks
źródło
dobrze, działa dobrze dla powyższych prostych identyfikatorów kontrolek. Jak sprawić, by działało w scenariuszach takich jak mam kontrolki z takimi identyfikatorami „txt_0_city”, „txt_1_city”, „txt_2_city”, „txt_3_city” i tak dalej, i chcę zliczać wszystkie takie elementy z identyfikatorami takimi jak „txt _ * _ city "
Rajiv Bhardwaj
Cześć @Rajiv, witamy w stackoverflow. Odpowiedziałem na drugą kopię twojego komentarza.
Glen Little
8

Nadaj temu elementowi wspólną nazwę klasy lub inny atrybut, o który możesz zapytać.

Yuriy Faktorovich
źródło
Cześć, dziękuję za odpowiedź, problem z twoją sugestią polega na tym, że może być wiele tabel zawierających JQgrid, więc mogą to być: „LIST_customer”, „LIST_carrier”… i tak dalej. I muszę wybrać oba na podstawie tylko początkowej części ID: "LIST_".
lidermin
1
Rozumiem, ale uczynienie ich wszystkich klasą List wydaje mi się bardziej czytelnym i opisowym podejściem. Do każdego z nich zawsze możesz użyć selektora startów z jQuery, jak pokazują inne odpowiedzi.
Yuriy Faktorovich
@lidermin To, co mówi Yuriy, powinno działać. Dlaczego nie dodać klasy do swoich kontrolek, takich jak „lista”, skoro masz list_ jako prefiks. więc kiedy wybierzesz tę klasę, otrzyma każdą z tych kontrolek. Będzie to najefektywniejszy sposób na zrobienie tego.
Josh Mein
Odpowiedź Jurija zadziała. Możesz dodać tę samą klasę (na przykład „ListsINeedToFind”) do wszystkich elementów „LIST_XXXX”, a następnie wyszukać je za pomocą $('.ListsINeedToFind').
Annabelle
Czasami konieczne jest posiadanie wielu elementów z tą samą klasą, ale różnymi identyfikatorami.
Vincent
1

Aby uzyskać element kończący się określonym id / znakiem

find('[id$=someid]')

Aby uzyskać element zaczynający się od określonego identyfikatora / znaku

find('[id*=anotherid]')

Aby uzyskać element pasujący do określonego identyfikatora / znaku

find('[id^=id]')
Haroon Khalid
źródło