2012-06-12 18 views
42

I mają następujące oznaczenia:jQuery (dane) zwraca niezdefiniowane, attr() zwraca całkowitą

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

pierwszy alert zwraca undefined, drugi alert zwraca liczbę całkowitą 3.

-- SEE DEMO --

używam jQuery w wersji 1.7.2 (data dodano wersji 1.4 wierzę)

dlaczego tak jest? Czy powinienem w ogóle używać data(), jeśli nie zwraca właściwych wartości?

Odpowiedz

91

OK. Znalazłem problem interpretując jQuery docs.

Kiedy piszesz:

$embellishment.data("embellishmentId"); 

to jest obsługiwane przez jQuery jako atrybut związek:

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

Tak więc, aby rozwiązać ten problem, można użyć małych liter w kluczu danych w przeciwnym razie tylko adresy inny atrybut.

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

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

Oto kod źródłowy, który robi to: 'var name = "teleinformatyczny" + key.replace (rmultiDash "- $ 1") .toLowerCase();' 'funkcji wewnętrznych w dataAttr'. Gdzie 'rmultidash' to' 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 - * - atrybuty – Alex

+0

Faceci, jQuery zrobił to od dawna. Spójrz na atrybuty CSS. Jeśli chcesz zobaczyć styl CSS, używa on camelCase dla nieprzypisanych atrybutów. Na przykład: '$ ('# elem'). Css ({paddingTop: '40px'});' i '$ ('# elem'). Css ({'padding-top': '40px'});' . – TerranRich

Powiązane problemy