2012-02-03 9 views
5

Acabo de cambiar de YUI2 a YUI3. Entonces, en lugar de usar YAHOO.util.Dom.get(ID_OF_ELEMENT), traté de usar Y.one('#ID_OF_ELEMENT)'. Funciona bien para un div con Identificaciónimg123, pero no con 123img o .YUI obtiene el elemento por el método id que no funciona para los ID de inicio numéricos

Intenté también usar Y.all pero no funcionó. La única forma que encontré para hacerlo funcionar, mientras seguía usando YUI, era usar Y.DOM.byId (se muestra como alternative in YUI forum).

Así que lo que hice fue agarrar el elemento con el último y obtener el Nodo con la primera, así:

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

no podía solo utilizando sólo Y.DOM.byId porque necesitaba para manipular su contenido como a Nodo.

Entonces, ¿hay alguna manera de hacerlo con solo Y.one? ¿Es eso un error de YUI?

He hecho un comentario sobre ese YUI forum entry, ya que no sé si realmente es un error que podría completar YUI bug reporting tool.

Respuesta

8

Si utiliza html4:

ID y NAME fichas deben comenzar con una letra ([A-Za-z]) y puede ser seguido por cualquier número de letras, dígitos ([0-9]), guiones ("-"), guiones bajos ("_"), dos puntos (":") y puntos (".").

Ver también this link.

ACTUALIZACIÓN === ===

para HTML5:

En su ejemplo usando Y.one(...) Yui llama al selector de consulta nativa navegadores: querySelector(selector) (ver here).
Pero no todos los navegadores de la función querySelector aceptan todos los html5 permitidos id s. P.ej. el selector de consulta nativo firfox10 falla para id s con dígito inicial (prueba this example en diferentes navegadores).
¿Por qué? Mozilla utiliza especificación CSS2.1 para los selectores:
Mozilla links in his querySelector documentation a los selectores de nivel API 1.
En el first chapter "Abstract":

selectores, que son ampliamente utilizados en CSS, son patrones que coincidan con contra elementos de una estructura de árbol [SELECT] [CSS21].

Los [SELECT] enlaces a la Selectors Level 3 y allí en chapter 6.5 "ID selectors":

...
Un selector de ID contiene un "signo de número" (U + 0023, #) seguido inmediatamente por el valor de ID, que debe ser CSS identifiers.
...

Desde el css2.1 identifiers specification vinculado:

En CSS, identificadores (incluidos los nombres de los elementos, clases e ID de los selectores) pueden contener sólo los caracteres [a- zA-Z0-9] e ISO 10646 caracteres U + 00A0 y superiores, más el guión (-) y el guión bajo (_); no pueden comenzar con un dígito, dos guiones o un guión seguido de un dígito. Los identificadores también pueden contener caracteres escapados y cualquier carácter ISO 10646 como un código numérico (consulte el siguiente elemento). Por ejemplo, el identificador "B & W?" se puede escribir como "B \ & W \?" o "B \ 26 W \ 3F".

ACTUALIZACIÓN === ===

permite utilizar las siguientes selector de [id="123"]. E.g .:

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

Ver también this example.

+1

Eso es HTML4, no HTML5. Los identificadores de elementos pueden comenzar con números o ser completamente numéricos en HTML5. http://dev.w3.org/html5/spec/Overview.html#the-id-attribute –

+0

olvidé, a la derecha, agregué su comentario. – scessor

+0

Bueno, eso explica las cosas. Entonces, supongo que YUI3 debería ser compatible con las especificaciones de HTML5. Esto es realmente una cuestión porque muchos sitios web pueden usar identificadores de inicio numérico o de inicio numérico. En este específico con el que estoy tratando, no puedo controlar ese hecho. Y usar ese tipo de truco es bastante feo. – lucasarruda

Cuestiones relacionadas