2009-05-24 13 views
62

Sto provando a selezionare tutti gli <div> s con lo stesso ID in jQuery. Come lo faccio?Come selezionare tutti gli elementi con un particolare ID in jQuery?

Ho provato questo e non ha funzionato

jQuery('#xx').each(function(ind,obj){ 
     //do stuff; 
}); 
+17

ID devono essere unici. Utilizzare le classi. –

+22

Tutti lo sanno, ma qui nessuno ha risposto alla sua domanda. – Sid

+3

Non sempre si può avere ID univoci, almeno non me lo posso permettere sempre. Bene, @mydoghasworms ha [risposto] [1] la domanda abbastanza bene, al punto. [1]: http://stackoverflow.com/questions/902839/jquery-select-divs-with-same-id#answer-6744674 – Fr0zenFyr

risposta

36

Vorrei utilizzare ID diversi ma assegnare a ogni DIV la stessa classe.

<div id="c-1" class="countdown"></div> 
<div id="c-2" class="countdown"></div> 

Questo ha anche il vantaggio di essere in grado di ricostruire gli ID in base al largo del ritorno di jQuery ('rovescia'). Lunghezza


Ok quanto sull'aggiunta di più classi a ciascun conto alla rovescia. IE:

<div class="countdown c-1"></div> 
<div class="countdown c-2"></div> 
<div class="countdown c-1"></div> 

In questo modo si ottiene il meglio di entrambi i mondi. Permette anche di ripetere 'IDS'

+0

Ballasacian: ho n segnalini con id 1..n, quindi per ognuno ho id = c-1, id = c-2 ecc. Ma alcuni di questi ripetono. quindi non posso usare il tuo metodo. e hanno tutti la stessa classe = 'conto alla rovescia' grazie – mark

+0

Perché dovresti farlo ripetere? Soprattutto su un ID che deve essere unico. – Ballsacian1

+0

Ballasacian: grazie! è stato fantastico! funziona come voglio io !! non so perché non ci ho pensato prima! – mark

36

Il documento non deve contenere due div con lo stesso ID. Questo è invalid HTML e, di conseguenza, l'API DOM sottostante non lo supporta.

Dal HTML standard:

id = nome [CS] Questo attributo assegna un nome a un elemento. Questo nome deve essere essere univoco in un documento.

È possibile assegnare ID diversi a ciascun div e selezionarli entrambi utilizzando $('#id1, #id2). Oppure assegnare la stessa classe a entrambi gli elementi (ad esempio .cls) e utilizzare $('.cls') per selezionarli entrambi.

+1

Va anche notato che la maggior parte delle funzioni getElementById() sottostanti jQuery e le altre librerie finiscono col chiamare per fare la ricerca effettiva rifiutare di restituire qualsiasi cosa tranne il primo (o casuale?) elemento corrispondente a un dato ID, e il suo supporto significherebbe manualmente camminare sul DOM. Solo non ne vale la pena per il markup non valido! – ironfroggy

+0

Per quanto riguarda questo post: È interessante notare che c'è una funzione javascript getElementsByName (xxx) - nota il plurale - sottintendendo che è perfettamente legale avere più di un elemento con lo stesso nome ... – Jimbo

+1

@Jimbo - Vero, ma la mia risposta riguarda elementi con lo stesso 'id', non' name'. –

2

È possibile assegnare una classe CSS univoca a ciascun timer distinto? In questo modo è possibile utilizzare il selettore per la classe CSS, che funzionerebbe correttamente con più elementi div.

+0

paul, no, non posso usare una classe unica per ogni timer, perché uso la classe per selezionare tutti i timer, per inizializzare e impostare il timer per il conto alla rovescia. – mark

+1

** HTML ** classe. Le persone usano le classi quasi esclusivamente per far corrispondere i selettori CSS, non le rendono parte di una lingua diversa. – Quentin

1

Si potrebbe anche provare a avvolgere i due div in due div con ID univoci. Selezionare quindi il div da $("#div1","#wraper1") e $("#div1","#wraper2")

Qui si va:

<div id="wraper1"> 
<div id="div1"> 
</div> 
<div id="wraper2"> 
<div id="div1"> 
</div> 
371

Anche se ci sono altre risposte corrette (come l'utilizzo di classi), da un punto di vista accademico è naturalmente possibile avere più div con lo stesso ID ed è possibile selezionarli con jQuery.

Quando si utilizza

jQuery("#elemid") 

seleziona solo il primo elemento con il dato ID.

Tuttavia, quando si seleziona per attributo (ad esempio id nel tuo caso), esso restituisce tutti gli elementi corrispondenti, in questo modo:

jQuery("[id=elemid]") 

Questo ovviamente funziona per la selezione su qualsiasi attributo, e si potrebbe perfezionare ulteriormente la selezione specificando il tag in questione (ad esdiv nel tuo caso)

jQuery("div[id=elemid]") 
+119

Sei stato l'unico a rispondere alla domanda posta. – wcm

+15

Questa è la risposta giusta. – d512

+6

Almeno qualcuno sa come fare cose reali in jQuery ... Accidenti! Morivo dalla voglia di sapere questo, nient'altro funziona. Semplicemente non posso prendere l'approccio di tutti gli altri dell'uso della classe, l'ho già lì per fare un lavoro diverso. Grandine @mydoghasworms !! – Fr0zenFyr

2

Prova questo per la selezione div dal primo id

$('div[id^="c-"]') 
4

$("div[id^=" + controlid + "]") torneranno tutti i controlli con lo stesso nome, ma è necessario assicurarsi che il testo non dovrebbe presentare in uno qualsiasi dei controlli

Problemi correlati