Encontre o elemento html cujo id começa com

89

minha pergunta é esta:

Tenho código HTML em várias páginas, em cada uma delas usei um JQgrid (grade jquery) para exibir alguns dados. Eu sabia que em cada uma dessas páginas, o elemento que contém o JQgrid é nomeado como "LIST_xxx". Agora preciso fazer um javascript que pegue aquele elemento "LIST_XXXX" em cada página e faça algumas coisas. Como poderia pesquisar um elemento por ID, mas sabendo apenas sua parte inicial (do ID, como mencionei anteriormente):

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

Espero ter sido claro. Obrigado.

lidermin
fonte

Respostas:

173

Experimentar

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

Deve funcionar

Glen Little
fonte
Layout muito melhor nessa referência do que a documentação do jquery.
Yuriy Faktorovich
Isso funciona bem, obrigado ... Eu usei para encontrar um id que termina com um valor específico como if ($ ('div [id $ = "' + val + '"]'). Length> 0) execute algo;
raphie
bem, está funcionando bem para IDs de controles simples acima. Como fazer funcionar para cenários como estou tendo controles com IDs como "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" e assim por diante, e quero a contagem de todos esses elementos com IDs como "txt _ * _ city "
Rajiv Bhardwaj
@Rajiv se você tiver controle sobre o html, seria bom adicionar uma classe como "cidade" a cada um desses elementos. Você pode então contá-los facilmente.
Glen Little
@Rajiv se você não pode melhorar o html, então verifique api.jquery.com/multiple-attribute-selector - você pode combinar os seletores. Por exemplo, $ ("span [id ^ = 'txt _'] [id $ = '_ city']")
Glen Little
22

Você precisa usar o atributo começa com seletor , assim:

$('[id^=list_]').whatever()
SLaks
fonte
bem, está funcionando bem para IDs de controles simples acima. Como fazer funcionar para cenários como estou tendo controles com IDs como "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" e assim por diante, e quero a contagem de todos esses elementos com IDs como "txt _ * _ city "
Rajiv Bhardwaj
Olá @Rajiv, bem-vindo ao stackoverflow. Eu respondi a outra cópia do seu comentário.
Glen Little
8

Dê a esse elemento um nome de classe comum ou algum outro atributo que você possa consultar.

Yuriy Faktorovich
fonte
Olá, obrigado por sua resposta, o problema com sua sugestão é que pode haver várias tabelas segurando JQgrid, então pode haver: "LIST_customer", "LIST_carrier" ... e assim por diante. E eu preciso selecionar ambos com base apenas na parte do ID inicial: "LIST_".
lidermin de
1
Eu entendo, mas fazer de todas elas uma classe de lista parece uma abordagem mais legível e descritiva para mim. Para cada um, você sempre pode usar o seletor começa com em jquery, conforme mostrado por outras respostas.
Yuriy Faktorovich
@lidermin O que Yuriy diz deve funcionar. Por que você não adiciona uma classe aos seus controles, como "lista", já que você tem list_ como seu prefixo. então, quando você selecionar essa classe, ela obterá cada um desses controles. Essa será a maneira mais eficiente de fazer isso.
Josh Mein
A resposta de Yuriy funcionará. Você pode adicionar a mesma classe (por exemplo "ListsINeedToFind") a todos os seus elementos "LIST_XXXX" e, em seguida, procurá-los usando $('.ListsINeedToFind').
Annabelle de
Às vezes, é necessário ter vários elementos com a mesma classe, mas IDs diferentes.
Vincent
5

Use o seletor "atributo começa com" http://api.jquery.com/attribute-starts-with-selector/

$("[id^=list_]")

Esteja ciente de que isso é ineficiente. Prefixo com o nome da tag e descendente do pai mais próximo, se possível.

Chetan S
fonte
1

Para obter um elemento terminando com um certo id / personagem

find('[id$=someid]')

Para obter um elemento começando com um certo id / personagem

find('[id*=anotherid]')

Para obter um elemento que corresponda a um certo id / personagem

find('[id^=id]')
Haroon Khalid
fonte