2012-06-12 13 views
42

I tienen el siguiente código:datos jQuery() devuelve indefinido, attr() devuelve número entero

alert($embellishment.data("embellishmentId")); 
alert($embellishment.attr("data-embellishmentId")); 

La primera alerta devuelve undefined, mientras que la segunda alerta devuelve un entero, 3.

-- SEE DEMO --

estoy usando jQuery versión 1.7.2 (data se añadió con la versión 1.4 creo)

¿Por qué es esto? ¿Debería usar data() si no devuelve los valores correctos?

Respuesta

91

OK. Encontré el problema al interpretar jQuery docs.

Cuando se escribe:

$embellishment.data("embellishmentId"); 

se maneja por jQuery como atributo compuesto:

<div data-embellishment-id="3"></div> 

Por lo tanto, para resolver el problema, puede utilizar minúsculas en la llave de datos lo contrario sólo direcciones el diferente atributo.

<!-- HTML --> 
<div data-embellishmentid="3"></div> 

// JavaScript 
$embellishment.data("embellishmentid"); 
+5

Aquí está el código fuente que lo hace: 'var name = "Data-" + key.replace (rmultiDash, "- $ 1") .tolowercase();' 'en función interna dataAttr'. Donde 'rmultidash' es' rmultiDash =/([AZ])/g; ' – Esailija

+0

http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#embedding-custom-non -visible-data-with-the-data - * - attributes – Alex

+0

Chicos, jQuery lo ha hecho durante mucho tiempo. Eche un vistazo a los atributos de CSS. Si desea ver un estilo CSS, usa camelCase para atributos no citados. Por ejemplo: '$ ('# elem'). Css ({paddingTop: '40px '});' y '$ (' # elem '). Css ({' padding-top ':' 40px '});' . – TerranRich

Cuestiones relacionadas