2012-02-03 17 views
5

Właśnie zmieniłem z YUI2 na YUI3. Dlatego zamiast używać YAHOO.util.Dom.get(ID_OF_ELEMENT), próbowałem użyć Y.one('#ID_OF_ELEMENT)'. To działa dobrze dla div z idimg123, ale nie z 123img lub .YUI otrzymuję metodę by element id nie działa dla liczbowych identyfikatorów początkowych

Próbowałem również używać Y.all, ale to nie zadziałało. Jedynym sposobem, który sprawił, że zadziałało, nadal używając YUI, było użycie Y.DOM.byId (pokazanego jako alternative in YUI forum).

Więc co zrobiłem było chwycić elementu z ostatniego i uzyskać Node z pierwszego, jak to:

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

nie mogłem sam używając tylko Y.DOM.byId bo potrzebne do manipulowania jego zawartość jako a Węzeł Node.

Czy istnieje sposób, aby to zrobić, używając tylko Y.one? Czy to błąd YUI?

Zrobiłem komentarz na temat tego YUI forum entry, ponieważ nie wiem, czy to naprawdę błąd, który mogę wypełnić YUI bug reporting tool.

Odpowiedz

8

Jeśli używasz HTML4:

Identyfikator i nazwisko tokeny musi zaczynać się od litery ([a-zA-Z]) i może być stosowana dowolna liczba liter, cyfr ([0-9]), łączniki ("-"), podkreślenia ("_"), dwukropki (":") i kropki (".").

Zobacz także this link.

=== UPDATE ===

HTML5:

W przykładzie z użyciem Y.one(...) Yui wzywa przeglądarek natywną selektor zapytania: querySelector(selector) (patrz here).
Jednak nie wszystkie funkcje querySelector w przeglądarce akceptują wszystkie dozwolone html5 id s. Na przykład. Natywny selektor zapytania firfox10 nie działa dla id s z początkową cyfrą (spróbuj this example w różnych przeglądarkach).
Dlaczego? Mozilla używa specyfikacji CSS2.1 do selektorów:
Mozilla links in his querySelector documentation do selektorów API Poziom 1.
W first chapter "Abstract":

selektory, które są powszechnie stosowane w CS, na które odpowiadają wzory elementami struktura drzewa [SELECT] [CSS21].

W [SELECT] linki do Selectors Level 3 i tam chapter 6.5 "ID selectors":

...
selektor ID zawiera znak "numer" (U + 0023, #) niezwłocznie po według wartości identyfikatora, która musi być wartością CSS identifiers.
...

Od połączonego css2.1 identifiers specification:

W CSS, identyfikatory (w tym nazwy elementów, klasy i identyfikatory w selektorach) mogą zawierać tylko znaki [a- zA-Z0-9] i ISO 10646 znaków U + 00A0 i wyższych plus myślnik (-) i podkreślenie (_); nie mogą zaczynać się od cyfry, dwóch łączników lub łącznika, a po nich cyfry. Identyfikatory mogą również zawierać znaki ze znakiem ewakuacji i dowolny znak ISO 10646 jako kod liczbowy (patrz następny element). Na przykład identyfikator "B & W?" może być zapisany jako "B \ & W \?" lub "B \ 26 W \ 3F".

=== UPDATE ===

można użyć następujących selektora [id="123"]. Np .:

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

Zobacz także this example.

+1

To jest HTML4, a nie HTML5. Identyfikatory elementów mogą zaczynać się od liczb lub być całkowicie numeryczne w HTML5. http://dev.w3.org/html5/spec/Overview.html#the-id-atrybut –

+0

zapomniałem, prawda, dodałem twój komentarz. – scessor

+0

Cóż, to tłumaczy. Myślę więc, że YUI3 powinien obsługiwać specyfikację HTML5. Jest to naprawdę ważne, ponieważ wiele stron internetowych może używać identyfikatorów numerycznych lub liczbowych. Na tym konkretnym, z którym mam do czynienia, nie mogę kontrolować tego faktu. I używanie tego rodzaju hack jest dość brzydkie. – lucasarruda