2011-06-28 13 views
10

Testuję z IE8. Właśnie zaktualizowałem jQuery z wersji 1.5.2 do wersji 1.6.1, a teraz metoda danych nie działa.jQuery .data() nie pobiera danych- *

wygląd wiersz tak:

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

to działa:

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

to nie działa:

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

Czy jest to błąd w nim?

Oto przykład. Uruchom go w 1.5.2, a następnie 1,6 zobaczyć, jak działają one inaczej ... http://jsfiddle.net/5hbKX/

Odpowiedz

16

Z docs(podejrzewam zmianę wymienioną w 1.6 jest winien - Próbowałeś usuwania sprawę, spojrzeć na lastValue przykład):

HTML 5 teleinformatyczny Atrybuty

Jak jQuery 1.4.3 HTML 5 data- attributes zostanie automatycznie wciągnięta do danych w jQuery obiekt. Obróbka atrybutów z osadzonymi kresek została zmieniona w jQuery 1.6 na , aby była zgodna z z W3C HTML5 specification.

Na przykład, biorąc pod uwagę następujące HTML:

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

wszystkich następującego kodu jQuery będzie pracy.

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

Każdy próbuje się przekształcić ciąg do wartości JavaScript (w tym zawiera wartości logicznych, liczby obiektów, tablic oraz NULL) w przeciwnym razie pozostaje jako ciąg znaków. Aby pobrać atrybut wartości o wartości jako ciąg bez próby zamiany go na , należy użyć metody attr() . Gdy atrybut danych jest obiektem (rozpoczyna się od '{') lub tablicą (rozpoczyna się od '['), wówczas jQuery.parseJSON służy do analizy ciągu ; musi być zgodna z prawidłową składnią JSON , w tym z cytowanymi nazwami właściwości: . Atrybuty danych są pobierane w momencie, gdy właściwość danych uzyskała wartość , a następnie nie są już dostępne ani przekształcane (wszystkie wartości danych są następnie przechowywane wewnętrznie w jQuery).

Z powyższego HTML5 specification:

niestandardowy atrybut danych jest atrybutem w żadnym nazw którego nazwa rozpoczyna się od ciągu „DATA-” , ma co najmniej jeden znak po łączniku jest zgodny z XML i nie zawiera znaków od w zakresie od U + 0041 do U + 005A (LATIN CAPITAL LETTER A do LATIN KAPITAŁOWY LITER Z).

wszystkich atrybutów elementów HTML w dokumentów HTML dostać ASCII małe litery automatycznie, więc ograniczenie ASCII wielkimi literami nie wpływa takich dokumentów.

+0

Zgaduję, że to wszystko. Zmiana na małe Zmieniło to: http://jsfiddle.net/5hbKX/1/ Ten rodzaj śmierdzi jest znacznie mniej czytelny: .data ("docclassattributefieldid") vs .data ("DocClassAttributeFieldId") – Homer

+0

Interesująca uwaga, jeśli przeglądasz źródło w Firebug (FF) i Firebug-lite (IE) dane- * są pisane małymi literami, ale oglądając je w IE Developer Tools jest to mieszany przypadek. – Homer

+6

Jeśli pisownia liter nie jest dozwolona, ​​zamiast tego użyj łączników-łączników-słów. – Betamos