2010-07-23 10 views
6

Estoy usando IE8 y jQuery 1.4.2. Mi página web ya no se está procesando correctamente, y un rápido vistazo al depurador en el HTML muestra que cada elemento ahora tiene un nuevo atributo llamado "jQuery1279875396122", cuyo valor es un entero pequeño, aparentemente único para cada nodo.jQuery agrega un atributo extraño a los nodos

Al ver la fuente de jQuery puedo ver que el número largo proviene de (nueva fecha) .getTime(), pero ese es el límite de mi comprensión sin mucha más investigación.

No sé si esto está relacionado con mi problema de representación, pero nunca antes lo había notado, en IE8 o en cualquier otro navegador. ¿Alguien puede explicar qué son estos atributos?

+0

¿Su HTML valida? –

+0

¿Utiliza la función 'datos' de jQuery para asignar datos a los elementos? Creo que agrega estos atributos a los elementos para realizar un seguimiento de los nodos únicos. Sin embargo, esto no debería afectar el renderizado de ninguna manera. ¿Puedes publicar una URL? – RoToRa

+0

Sí, está bien. –

Respuesta

11

jQuery utiliza estas propiedades "expando" para realizar un seguimiento de los datos asociados a los elementos. jQuery usa su API de datos para el manejo de eventos más cualquier información general que desee vincular a un elemento (usando $.data).

La propiedad (jQuery1279875396122) tendrá un valor asociado con una posición en jQuery.cache.

La razón por la que jQuery no guarda datos directamente en el elemento (como propiedades normales) es para evitar fugas de memoria y, en general, para ser un poco menos molesto.


A modo de ejemplo, cuando se enlaza un controlador de eventos a un elemento, así:

jQuery('div').click(doSomething); 

La función doSomething se almacenará en jQuery.cache y, en un nivel rudimentario, su posición (o más bien, la posición del objeto que lo hace referencia) se asignará a la propiedad del elemento jQuery1279875396122. jQuery seguirá utilizando la API nativa del navegador para vincularse al evento del elemento, pero cuando se active, jQuery buscará (en jQuery.cache) y llamará a los manejadores correctos.

EDITAR: Para que quede claro, estas propiedades no son motivo de preocupación. Debería esperar verlos en todos los elementos que tienen datos enlazados a través de jQuery (incluidos los controladores de eventos). Me sorprendería mucho que esta fuera la causa de su problema de renderizado.

+0

Interesante. Pero nunca antes había visto estos atributos, y todavía no puedo verlos en Firefox/Firebug. Además, cada nodo tiene uno, no solo aquellos en los que hemos almacenado datos. –

+0

@Charles Anderson, es posible que no haya almacenado intencionalmente los datos en estos nodos. jQuery usa su API de datos para tareas internas. Además, la propiedad de expansión solo está visible como un atributo en IE (AFAIK). FF y otros navegadores lo tratan como una propiedad DOM normal y, por lo tanto, no aparecerá en el HTML real. – James

+0

Solo pensé en agregar mi voto de confianza al hecho de que esto no cambiará nada la representación. – Chris

Cuestiones relacionadas