2014-05-08 60 views
13

這看起來很簡單,但我不明白爲什麼它不起作用。選擇器是正確的,但div .faqContent不會被更新爲data-height屬性。jQuery的數據attr沒有設置

$('.faqItem .faqContent').each(function(){ 
    var h = $(this).height(); 
    $(this).data('height',h); 
}); 

我已經檢查了var h是正確的,它是在colsole.log爲正確把握的高度。

編輯 這絕對沒有衝突,控制檯顯示沒有錯誤。

+4

僅供參考值由。數據()設定不會反映。 –

+0

嘗試控制該值。所以你會得到每個的價值。 – Renjith

+3

如果數據高度attritbute已經存在,並且您嘗試更新它,那麼它將無法工作......您需要使用'.attr(data-height,h)' –

回答

20

您將無法在元素檢查器中看到它,但它存在,因爲jquery在內部設置了數據屬性。

嘗試console.log($(this).data('height'));

+0

絕對可見。感謝@Mohammad Adil,它在那裏。 – ggdx

+2

有多混淆!可怕的設計。謝謝你,雖然:) –

36

data功能混淆了很多人,它不只是你。 :-)

data管理jQuery的元素內部數據對象,不是data-*屬性。 data僅使用data-*屬性來設置初始值。它永遠不會設置data-*屬性的元素。

如果要真正地設置data-*屬性,使用attr

$(this).attr("data-height", h); 

但如果你只是想此信息以供將來使用,data是好的,只是不希望看到它在DOM檢查器,因爲jQuery不會將此信息寫入DOM。

+1

偉大的答案,解決了數據屬性的奧祕。帽子掉了! – 112233

2

.data()僅在內存中存儲關聯的新值(或內部)。它不會更改DOM中的屬性,因此您無法使用檢查器工具查看更新。

要更改屬性,你可以使用.attr()

$('.faqItem .faqContent').each(function(){ 
    var h = $(this).height(); 
    $(this).attr('data-height',h); 
}); 
0

JQuery的。數據()存儲元素本身的價值,也不會添加屬性。

http://api.jquery.com/data/

如果要添加屬性,使用ATTR:當你檢查這些元素

$('.faqItem .faqContent').each(function(){ 
    var h = $(this).height(); 
    $(this).attr('data-height', h); 
}); 

http://api.jquery.com/attr/