2012-06-12 18 views
42

ho il seguente codice:dati jQuery() restituisce undefined, attr() restituisce intero

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

Il primo allarme restituisce undefined, mentre il secondo avviso restituisce un intero, 3.

-- SEE DEMO --

Sto utilizzando jQuery versione 1.7.2 (data è stato aggiunto con la versione 1.4 credo)

Perché è questo? Dovrei usare data() affatto se non sta restituendo i valori giusti?

risposta

91

OK. Ho trovato il problema interpretando jQuery docs.

quando si scrive:

$embellishment.data("embellishmentId"); 

è gestita da jQuery come attributo composto:

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

Così, per risolvere il problema è possibile utilizzare lettere minuscole nella chiave di dati altrimenti diventa solo indirizzi il diverso attributo.

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

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

Ecco il codice sorgente che lo fa: 'nome var = "data-" + key.replace (rmultiDash, "- $ 1") .tolowercase();' in funzione interna 'dataAttr'. Dove 'rmultidash' è' 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

Ragazzi, jQuery lo ha fatto per molto tempo. Dai un'occhiata agli attributi CSS. Se vuoi vedere uno stile CSS, usa camelCase per gli attributi non quotati. Ad esempio: '$ ('# elem'). Css ({paddingTop: '40px'});' e '$ ('# elem'). Css ({'padding-top': '40px'});' . – TerranRich