2012-02-03 3 views
5

Sono appena passato da YUI2 a YUI3. Quindi, invece di usare YAHOO.util.Dom.get(ID_OF_ELEMENT), ho provato a usare Y.one('#ID_OF_ELEMENT)'. Funziona bene per un div con idimg123, ma non con 123img o .YUI ottiene l'elemento con il metodo id non funzionante per gli ID iniziali numerici

Ho provato a utilizzare anche Y.all ma non ha funzionato. L'unico modo che ho trovato per farlo funzionare, mentre ancora utilizzo YUI, stava usando Y.DOM.byId (mostrato come alternative in YUI forum).

Quindi quello che ho fatto è stato per afferrare l'elemento con l'ultimo e ottenere il Nodo con il primo, in questo modo:

Y.one(Y.DOM.byId(ID_OF_ELEMENT)).append(SOME_HTML_CONTENT); 

non ho potuto solo utilizzando solo Y.DOM.byId perché avevo bisogno di manipolare il suo contenuto come a Nodo.

Quindi, c'è un modo per farlo utilizzando solo Y.one? È un bug YUI?

Ho fatto un commento su quello YUI forum entry, poiché non so se questo è davvero un bug che potrei compilare in YUI bug reporting tool.

risposta

8

Se si utilizza HTML4:

ID e NAME devono iniziare con una lettera ([A-Za-z]) e può essere seguita da un numero qualsiasi di lettere, cifre ([0-9]), trattini ("-"), underscore ("_"), due punti (":") e punti (".").

Vedere anche this link.

UPDATE === ===

per HTML5:

Nel tuo esempio utilizzando Y.one(...) Yui chiama il browser nativo di selezione query: querySelector(selector) (vedi here).
Ma non tutti i browser funzione querySelector accettano tutti i permessi html5 id s. Per esempio. il selettore di query nativo di firfox10 non riesce per id s con la cifra iniziale (prova this example in diversi browser).
Perché? Mozilla usa specifica CSS2.1 per selettori:
Mozilla links in his querySelector documentation ai selettori API Livello 1.
Nella first chapter "Abstract":

selettori, che sono ampiamente utilizzati in CSS, sono modelli che hanno contro gli elementi a una struttura ad albero [SELECT] [CSS21].

I [SELECT] collegamenti al Selectors Level 3 e là in chapter 6.5 "ID selectors":

...
Un selettore ID contiene un "segno di numero" (U + 0023, #) immediatamente seguito dal valore ID, che deve essere un CSS identifiers.
...

Dal legata css2.1 identifiers specification:

In CSS, identificatori (inclusi i nomi di elementi, classi e gli ID nei selettori) possono contenere solo i caratteri [a- zA-Z0-9] e ISO 10646 caratteri U + 00A0 o superiore, più il trattino (-) e il carattere di sottolineatura (_); non possono iniziare con una cifra, due trattini o un trattino seguito da una cifra. Gli identificatori possono anche contenere caratteri di escape e qualsiasi carattere ISO 10646 come codice numerico (vedere l'elemento successivo). Ad esempio, l'identificatore "B & W?" può essere scritto come "B \ & W \?" o "B \ 26 W \ 3F".

UPDATE === ===

È possibile utilizzare seguente selettore [id="123"]. Es .:

YUI().use('node', function (Y) { 
    Y.one('[id="123"]').on("click", function (e) { 
     alert("Hello World!"); 
    }); 
}); 

Vedere anche this example.

+1

Questo è HTML4, non HTML5. Gli ID elemento possono iniziare con numeri o essere completamente numerici in HTML5. http://dev.w3.org/html5/spec/Overview.html#the-id-attribute –

+0

ho dimenticato, giusto, ha aggiunto il tuo commento. – scessor

+0

Bene, questo spiega le cose. Quindi, suppongo che YUI3 supporti le specifiche HTML5. Questo è davvero un aspetto perché molti siti Web possono utilizzare ID di sola lettura numerica o numerica. Su questo specifico con cui ho a che fare, non posso controllare questo fatto. E usare quel tipo di hack è piuttosto brutto. – lucasarruda

Problemi correlati