2014-05-14 27 views
0

說,當我更改數據attr然後訪問它,我得到初始值?

<a id="link-one" href="#" data-status="true">Anchor</a> 

下面的代碼將 「真」 在控制檯上:

console.log($('#link-one').data('status')); 

而且,當我改變這樣的價值:

$('#link-one').attr('data-status', 'false'); 

價值的變化,我可以看到通過使用Chrome檢查器檢查元素。是的,它確實在變化。

但是,在分配/更改上述值之後,然後在更改返回初始值後再次訪問它,而不是修改的新值。我需要訪問當前值,即更改後。

console.log($('#link-one').data('status')); // writes "true" 
$('#link-one').attr('data-status', 'false'); 
console.log($('#link-one').data('status')); // writes "true" again 

我錯過了什麼嗎?或者這是jQuery的默認行爲(如果是的話,我該如何實現我所需要的)?

+1

數據屬性和數據對象屬性不一樣。僅當第一次解析時,Jquery纔會將數據屬性解析爲數據對象屬性。你應該使用'$('#link-one')。data('status',false);'注意比字符串''false''在JavaScript中被評估爲true,我想你想要一個布爾值 –

+1

'attr '是爲DOM的屬性。 'href','src','class'等。'data'是完全獨立的,並且不相關。 –

+1

你應該使用'data()'作爲getter和setter。 –

回答

6

data-attribute在jQuery將首次訪問它時解析,並在文檔加載時爲默認值。

如果你想將數據值設置爲false,你必須這樣做:

$("#link-one").data("status", false); 

而且比你可以訪問它:

$("#link-one").data("status"); // False now 

Quote

關於HTML5數據屬性:這個低級別的方法不會 檢索data- *屬性,除非更方便.data() 方法已經檢索到它們。

這意味着,一旦解析,它不會再解析它。

+0

好的。作品。謝謝。 – user3332579

相關問題