2011-08-23 17 views
16

Używam intensywnie atrybutów danych do zarządzania danymi w zdarzeniach po stronie klienta. Czy jest możliwe dynamiczne przypisywanie wartości do atrybutu danych za pomocą javascript lub jquery?Ustawianie wartości dynamicznie dla atrybutów danych przy użyciu jquery

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


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

Powyższy kod javascript wyrzuca błąd:

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

Może ktoś proszę mi powiedzieć, jak można to osiągnąć?

Odpowiedz

21

Trzeba zrobić

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

Dzięki pracował jak czar ... –

26

wierzę odpowiedzi powyżej byłoby ustawić tylko obiekt danych na temat tego elementu w jQuery.

Jeśli trzeba ustawić rzeczywistą DATA- HTML * atrybutu, trzeba by użyć tego:

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

Strzeż pobierania HTML5 data- * atrybuty w ten sposób, a także, jak chociaż można użyć skrót $(this).data("class_value");, aby je odzyskać, kolejne wyszukiwania będą używać buforowanej wartości w obiekcie danych jQuery.

Z 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).

Źródło: jQuery caching of data attributes

+3

To buforowanie atrybutów danych jadły kilka godzin, dzięki! – Heihachi

+0

Jak obejść ten problem z buforowaniem? Próbowałem '$ (this) .removeAttr (" data-class_value "," new value ");' ale oczywiście to nie działa. Jakieś wskazówki? – kevllar

+0

@kevllar 'removeAttr' przyjmuje tylko jeden argument. Więc nie ustawi dla ciebie nowej wartości. Zamiast tego musisz użyć 'attr'. – jjeaton

Powiązane problemy