2011-08-23 6 views
16

Utilizo los atributos de datos de manera extensiva para administrar datos en eventos del lado del cliente. ¿Es posible asignar valor dinámicamente a un atributo de datos usando javascript o jquery?Establecimiento de un valor de forma dinámica para los atributos de datos utilizando jquery

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


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

El anterior código javascript tiros el error:

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

Podría alguien por favor dígame cómo esto se puede lograr?

Respuesta

21

que tiene que hacer

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

Gracias trabajaron como un encanto ... –

2

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

.data

26

Creo que las respuestas anteriormente sólo se establezca el objeto de datos sobre ese elemento dentro de jQuery.

Si es necesario configurar los datos- real HTML * atributo, que había necesidad de utilizar este:

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

Cuidado con la recuperación de HTML5 Data- * atributos de esta manera, así, ya que si bien se puede utilizar el atajo $(this).data("class_value"); para recuperarlos, las recuperaciones posteriores utilizarán el valor en caché en el objeto de datos jQuery.

Desde el 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).

Fuente: jQuery caching of data attributes

+3

que el almacenamiento en caché de los atributos de datos comió unas horas, gracias! – Heihachi

+0

¿Cómo se soluciona el problema del almacenamiento en caché? Intenté '$ (this) .removeAttr (" data-class_value "," new value ");' pero, por supuesto, no funciona. ¿Alguna pista? – kevllar

+0

@kevllar 'removeAttr' solo toma un argumento. Por lo tanto, no establecerá el nuevo valor para usted. Tendría que usar 'attr' en su lugar. – jjeaton

Cuestiones relacionadas