2013-07-10 19 views
7

Does querySelectorAll supporta il periodo di caratteri (.) Nell'id?Does querySelectorAll supporta il periodo di caratteri (.) Nell'id?

Voglio dire, se aggiungo un elemento come di seguito:

var div = document.createElement('div'); 
div.id='my.divid'; 
document.body.appendChild(div); 

e poi io uso querySelectorAll come di seguito:

document.querySelectorAll('#my.divid'); 

Non ho niente!

Quindi periodo è il carattere legale per id e querySelectorAll è il metodo ufficiale fornito da firefox, non riesco a credere che il metodo non supporti il ​​punto (.) Nell'ID. Ho fatto qualche errore?

Grazie!

risposta

0

Un periodo in querySelectorAll significa che si specifica una classe css. Nel tuo caso querySelectorAll sta cercando di trovare un elemento DOM con "mio" e con una classe css "divid". In che modo querySelectorAll sai che questa volta vuoi elemento per id e non per classe? Spetta a te avere atrribute id corrette in modo da non confondere il metodo. Sebbene sia consentito un periodo, la migliore pratica è evitarla il più delle volte in modo da non confondere altre librerie come jquery ecc.

+0

Quindi vuol dire che querySelectorAll non supporta il periodo nell'attributo id? Se voglio inserire il punto in id, non riesco a ottenerlo tramite querySelectorAll, o devo cambiare il punto (.) In id per il backslash e il punto (\.), Giusto? – user2155362

+5

Dovrai usare "\\". per sfuggire, penso. – mohkhan

+2

@ user2155362: è necessario aver perso la risposta a cui ho rivolto la mia risposta, in cui ho spiegato praticamente tutto ciò che hai chiesto, 10 minuti prima di pubblicare il tuo commento. – BoltClock

13

è necessario ricordare che . rappresenta un selettore di classe, in modo che il selettore di #my.divid rappresenta un elemento con l'ID my e una classe divid, non un elemento con l'ID my.divid. Quindi, l'elemento seguente sarebbe stato accompagnato da vostro selettore:

var div = document.createElement('div'); 
div.id = 'my'; 
div.className = 'divid'; 
document.body.appendChild(div); 

Se è necessario selezionare un elemento con l'ID my.divid come avete dato sopra, avete bisogno di sfuggire il periodo:

document.querySelectorAll('#my\\.divid'); 

Si noti che il doppio backslash è perché è una stringa selettore JS; in una regola CSS dovresti utilizzare una singola barra rovesciata: #my\.divid

+0

grazie per chiarire l'uso della doppia barra @BoltClock – gumuruh

0

Sono abbastanza sicuro che non è nemmeno legale in un ID. e in CSS, questo sarebbe interpretato come qualcosa del genere: <div id="my" class="divid"></div>. Non potresti mai farlo in quel modo. E poiché querySelectorAll utilizza lo stesso parser (penso), avrai gli stessi problemi.

+1

In HTML5, un [ID] (http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#the-id-attribute) deve contenere almeno un carattere e nessuno spazio bianco. Oltre a questo, qualsiasi cosa vada. Le restrizioni di HTML 4.01 sono finite. In pratica, i browser hanno già consentito quasi tutto prima che HTML lo rendesse ufficiale. – RobG

+1

Impara qualcosa di nuovo. Non che io pensi che inizierò ad aggiungere "." S al mio 'id's, ma è bello sapere. Non sapevo nemmeno che fosse giusto iniziare con un numero ora ... – kalley

+0

Di solito c'è una grande differenza tra ciò che * puoi * fare e ciò che è * ragionevole * da fare. :-) – RobG

Problemi correlati