2013-08-07 16 views
50

Ho un data-attributo personalizzato impostato per default:ottenere i dati-attributo jquery javascript vs

data-equipment="0"

se cambio con jQuery utilizzando .data()

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

e quindi utilizzare il getAttribute()

this.getAttribute("data-equipment")

ottengo il vecchio valore (0) e non quello nuovo (10). Ma se io uso

$(this).data("equipment") ottengo il nuovo valore (10).

Si suppone che funzioni in questo modo o mi manca qualcosa?

Grazie!

+1

'.data()' non supporta gli attributi dei dati. Prende semplicemente il valore dall'attributo, quindi usa la propria memoria di dati per tenerlo senza mai aggiornare l'attributo. Personalmente non userei jQuery '.data()' per questo. Gli attributi dati –

+0

sono accessibili utilizzando element.dataset che non credo sia utilizzato da jQuery. – Virus721

risposta

45

.data() non funziona sugli attributi dei dati ma nella cache interna di jQuery. Inizialmente se non viene trovato alcun record di cache, i dati vengono letti da un corrispondente attributo data-, se ne esiste uno, ma questa è la fine della loro cooperazione.

Se operasse su attributi, sarebbe inutile per il suo scopo perché i valori degli attributi devono essere stringhe.

+1

Penso che questa sia la differenza principale tra '$ (this) .data (" equipment ")' e '$ (this) .attr (" data-equipment ")'. Se recuperi alcuni attributi di dati con '$ (this) .data (" equipment ")' e cambia il valore dell'attributo con '$ (this) .attr (" data-equipment "," some value ")', allora non puoi recuperare nuovo valore con '$ (this) .data (" equipment ")' a causa del meccanismo di caching di jQuery. – beawolf