2011-08-23 3 views
16

Uso estensivamente gli attributi dei dati per la gestione dei dati negli eventi lato client. È possibile assegnare il valore dinamicamente a un attributo di dati utilizzando javascript o jquery?Impostazione dinamica di un valore per gli attributi dei dati utilizzando jquery

<li data-class_value="somevalue" class="myclass"></li> 


$('.myclass').click(function(){ 
    $(this).data('class_value') = "new value"; 
}); 

È possibile che questo codice javascript genera l'errore:

"Uncaught ReferenceError: Invalid left-hand side in assignment".

Qualcuno potrebbe dirmi come questo può essere realizzato?

risposta

21

Hai bisogno di fare

$(this).data('class_value', "new value"); 
+0

Grazie lavorato come un fascino ... –

2

$(this).data('class_value','new value') ;

.data

26

Credo che le risposte di cui sopra avrebbero dato solo l'oggetto di dati su quel elemento all'interno di jQuery.

Se è necessario impostare la Data- HTML effettivo * attributo, avresti bisogno di utilizzare questo:

$(this).attr("data-class_value", "new value"); 

Attenzione di recupero HTML5 dati- * attribuisce questo modo pure, come anche se è possibile utilizzare la scorciatoia $(this).data("class_value"); per recuperarli, i successivi recuperi utilizzeranno il valore memorizzato nella cache nell'oggetto di dati jQuery.

Dal jQuery docs:

The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).

Fonte: jQuery caching of data attributes

+3

che la cache di attributi dei dati mangiato poche ore, grazie! – Heihachi

+0

Come aggirare il problema del caching? Ho provato '$ (this) .removeAttr (" data-class_value "," nuovo valore ");' ma ovviamente non funziona. Qualche indizio? – kevllar

+0

@kevllar 'removeAttr' accetta solo un argomento. Quindi non imposterà il nuovo valore per te. Dovresti invece usare 'attr'. – jjeaton