2011-08-23 78 views
16

我廣泛使用數據屬性來管理客戶端事件中的數據。是否有可能使用javascript或jquery動態地賦值給數據屬性?使用jquery爲數據屬性動態設置值

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


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

上述JavaScript程式碼引發錯誤:

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

可能有人請告訴我如何可以做到這一點?

回答

21

你需要做的

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

由於工作就像一個魅力... –

2

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

.data

26

我相信答案以上只會設置數據對象中的jQuery該元素上。

如果需要設置實際的HTML數據 - *屬性,你需要使用:

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

謹防檢索數據 - HTML5屬性*這種方式爲好,因爲雖然可以使用快捷鍵$(this).data("class_value");來檢索它們,後續的檢索將使用jQuery數據對象中的緩存值。

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

來源:jQuery caching of data attributes

+3

數據屬性的那個緩存吃了幾個小時,非常感謝! – Heihachi

+0

你如何解決緩存問題?我嘗試了'$(this).removeAttr(「data-class_value」,「new value」);'但它當然不起作用。任何線索? – kevllar

+0

@kevllar'removeAttr'只需要一個參數。所以它不會爲你設置新的價值。你需要使用'attr'來代替。 – jjeaton