Trova l'elemento html con cui l'ID inizia


89

la mia domanda è questa:

Ho il codice HTML in più pagine, su ciascuna di esse ho utilizzato una JQgrid (griglia jquery) per visualizzare alcuni dati. Sapevo che in ciascuna di queste pagine, l'elemento che contiene la JQgrid è denominato "LIST_xxx". Ora devo creare un javascript che prenda quell'elemento "LIST_XXXX" su ogni pagina e faccia alcune cose. Come posso cercare un elemento per ID ma conoscendone solo la parte iniziale (dell'ID, come ho detto prima):

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

Spero di essere stato chiaro. Grazie.

Risposte:


173

Provare

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

Dovrebbe funzionare


Layout molto migliore su quel riferimento rispetto alla documentazione di jquery.
Yuriy Faktorovich

Funziona bene grazie ... l'ho usato per trovare un id che finisca con un valore specifico come if ($ ('div [id $ = "' + val + '"]'). Length> 0) execute qualcosa;
Raphie

bene, funziona bene per gli ID dei controlli sopra semplici. Come farlo funzionare per scenari come se avessi controlli con ID come "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" e così via, e voglio che il conteggio di tutti questi elementi abbiano ID come "txt _ * _ city "
Rajiv Bhardwaj

@Rajiv, se hai il controllo sull'html, sarebbe bene aggiungere una classe come "città" a ciascuno di questi elementi. Puoi quindi contarli facilmente.
Glen Little,

@Rajiv se non riesci a migliorare l'html, controlla api.jquery.com/multiple-attribute-selector : puoi combinare i selettori. Ad esempio, $ ("span [id ^ = 'txt _'] [id $ = '_ city']")
Glen Little,

22

È necessario utilizzare l' attributo che inizia con selector , in questo modo:

$('[id^=list_]').whatever()

bene, funziona bene per gli ID dei controlli sopra semplici. Come farlo funzionare per scenari come se avessi controlli con ID come "txt_0_city", "txt_1_city", "txt_2_city", "txt_3_city" e così via, e voglio che il conteggio di tutti questi elementi abbia ID come "txt _ * _ city "
Rajiv Bhardwaj

Ciao @Rajiv, benvenuto in stackoverflow. Ho risposto all'altra copia del tuo commento.
Glen Little

8

Assegna a quell'elemento un nome di classe comune o un altro attributo per cui puoi eseguire una query.


Ciao, grazie per la tua risposta, il problema con il tuo suggerimento è che potrebbero esserci più tabelle che contengono JQgrid, quindi potrebbero esserci: "LIST_customer", "LIST_carrier" ... e così via. E devo selezionarli entrambi basen solo sulla parte ID iniziale: "LIST_".
lidermin

1
Capisco, ma renderli tutti una classe List mi sembra un approccio più leggibile e descrittivo. A ciascuno il suo, puoi sempre usare le inizia con selettore in jquery come mostrato da altre risposte.
Yuriy Faktorovich

@lidermin Quello che dice Yuriy dovrebbe funzionare. Perché non aggiungi una classe ai tuoi controlli come "list" dato che hai list_ come prefisso. quindi quando selezioni quella classe otterrà ciascuno di quei controlli. Questo sarà il modo più efficiente per farlo.
Josh Mein

La risposta di Yuriy funzionerà. È possibile aggiungere la stessa classe (ad esempio "ListsINeedToFind") a tutti gli elementi "LIST_XXXX" e quindi cercarli utilizzando $('.ListsINeedToFind').
Annabelle

A volte è necessario avere più elementi con la stessa classe ma ID diversi.
Vincent


1

Per ottenere un elemento che termina con un certo id / carattere

find('[id$=someid]')

Per ottenere un elemento che inizia con un certo id / carattere

find('[id*=anotherid]')

Per ottenere un elemento corrispondente a un determinato id / carattere

find('[id^=id]')
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.