2011-06-28 17 views
10

Estoy probando con IE8. Acabo de actualizar jQuery de v1.5.2 a v1.6.1 y ahora el método de datos no funciona.jQuery .data() no recuperando datos- *

el aspecto fila como esto:

<tr class="ui-widget-content alt" nodeIndex="2" data-DocAttributeFieldType="TextBox" data-DocClassAttributeFieldId="60777" jQuery16106588245076914028="66"> 

esto funciona:

$("#docClassAttributeFields tbody tr:first").attr("data-DocClassAttributeFieldId"); 

esto no funciona:

$("#docClassAttributeFields tbody tr:first").data("DocClassAttributeFieldId"); 

¿Hay un error en ella?

Aquí hay un ejemplo. Ejecutarlo con en 1.5.2 y 1.6 para ver cómo actúan de manera diferente ... http://jsfiddle.net/5hbKX/

Respuesta

16

Desde el docs(sospecho que el cambio en el número 1.6 tiene la culpa - ¿Ha intentado quitar la funda, mira el ejemplo lastValue):?

HTML 5 Data- Atributos

a partir de jQuery 1.4.3 HTML 5 data- attributes será automáticamente retirada en a los datos de jQuery objeto. El tratamiento de los atributos con guiones incrustados fue modificado en jQuery 1.6 para cumplir con el W3C HTML5 specification.

Por ejemplo, dada la siguiente HTML:

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div> 

Todo el siguiente código de jQuery trabajo.

$("div").data("role") === "page"; 
$("div").data("lastValue") === 43; 
$("div").data("hidden") === true; 
$("div").data("options").name === "John"; 

se hará todo lo posible para convertir la cadena en un valor JavaScript (esto incluye booleanos, números, objetos, matrices y nulo) de lo contrario, se deja como una cadena. Para recuperar el atributo del valor como una cadena sin ningún intento de para convertirlo, utilice el método attr() . Cuando el atributo de datos es un objeto (comienza con '{') o matriz (comienza con '['), entonces jQuery.parseJSON se usa para analizar la cadena ; debe seguir la sintaxis JSON válida, incluidos los nombres citados de la propiedad . Los datos-atributos se extraen la primera vez que se accede a la propiedad de datos y luego ya no están accedidos o mutados (todos los valores de datos se almacenan internamente en jQuery).

De lo anterior HTML5 specification:

Un personalizada de datos de atributos es un atributo en ningún espacio de nombres cuyo nombre comienza con la cadena "Data-", tiene por lo menos un carácter después del guión, es compatible con XML, y no contiene caracteres en el rango U + 0041 a U + 005A (LETRA MAYÚSCULA LATINA A a LATÍN LETRA MAYÚSCULA Z).

todos los atributos de los elementos HTML en documentos HTML obtener ASCII minúsculas de forma automática, por lo que la restricción en letras mayúsculas ASCII no afecta dichos documentos.

+0

Supongo que es eso. Cambiar a minúsculas lo solucionó: http://jsfiddle.net/5hbKX/1/ Ese tipo de cosas apestan, esto es mucho menos legible: .data ("docclassattributefieldid") vs .data ("DocClassAttributeFieldId") – Homer

+0

Nota interesante, si ve la fuente en Firebug (FF) y Firebug-lite (IE), el data- * está en minúscula, pero al verlo en Herramientas de desarrollo de IE es un caso mixto. – Homer

+6

Si las letras captiales no están permitidas, utilice -guiones-para-concatenar-palabras-en su lugar. – Betamos