2013-08-07 16 views
50

mam zwyczaj danych atrybut ustawiony domyślnie:uzyskać dane atrybut jquery vs javascript

data-equipment="0"

jeśli zmienię go z jQuery przy użyciu .data()

$(this).data("equipment", 10)

, a następnie użyj funkcji getAttribute()

this.getAttribute("data-equipment")

Otrzymuję starą wartość (0), a nie nową (10). Ale jeśli użyję

$(this).data("equipment") otrzymam nową wartość (10).

Czy to ma działać tak, czy też czegoś brakuje?

Dzięki!

+1

'.data()' nie obsługuje naprawdę atrybutów danych. Po prostu pobiera wartość z atrybutu, a następnie używa własnego magazynu danych do przechowywania go bez aktualizacji atrybutu. Osobiście nie użyłbym '.data() jQuery do tego. –

+0

dane-atrybuty są dostępne za pomocą elementu.dataset, który uważam, nie jest używany przez jQuery. – Virus721

Odpowiedz

45

.data() nie działa na atrybutach danych, ale w wewnętrznej pamięci podręcznej jQuery. Początkowo, jeśli nie znaleziono rekordu pamięci podręcznej, dane są odczytywane z odpowiedniego atrybutu data-, jeśli taki istnieje, ale to koniec ich współpracy.

Jeśli działał na atrybutach, byłby bezużyteczny do tego celu, ponieważ wartości atrybutów muszą być ciągami.

+1

Myślę, że jest to główna różnica między '$ (this) .data (" equipment ")' i '$ (this) .attr (" data-equipment ")'. Jeśli pobierzesz atrybut danych za pomocą '$ (this) .data (" equipment ")' i zmienisz wartość atrybutu za pomocą '$ (this) .attr (" data-equipment "," some value ")', wtedy nie możesz odzyskać nowa wartość z '$ (this) .data (" equipment ")' ze względu na mechanizm buforowania jQuery. – beawolf

Powiązane problemy