今天作項目的時候發現一個坑,關於jQuery獲取data-*屬性的方法data(),特寫此篇來記錄。html
data-*
自定義數據屬性HTML5規定能夠爲元素添加非標準型的屬性,只需添加前綴data-,這些屬性能夠隨意添加,隨意命名,目的是爲元素提供與渲染無關的信息,或提供語義信息。html5
data-*
的方式//HTML代碼
<div id="myDiv" data-appid="123" data-myname="lsxj"></div>jquery
//js代碼
var div = document.getElementById("myDiv");
var appId = div.dataset.appid;//獲取data-appid的值
var myName = div.dataset.myname;//獲取data-myname的值
//設置值
div.dataset.appid = 456;
div.dataset.myname = "newname";api
//最終HTML結果
<div id="myDiv" data-appid="456" data-myname="newname"></div>緩存
兼容性:app
//將上面代碼的設置值部分進行修改 div.dataset.appId = 789; div.dataset.myName = "secondname"; //最終結果 <div id="myDiv" data-appid="123" data-myname="lsxj" data-app-id="456" data-my-name="secondname"></div>
仍是上述的例子。獲取data-*的方法可以使用以下方法:post
var appId = div.getAttribute("data-appid");spa
//HTML代碼
<div id="myDiv" data-appid="123" data-myname="lsxj" data-app-id="456" data-my-name="secondname"></div>code
//獲取屬性
var appid = $("#myDiv").data("appid"); //123
var app-id = $("#myDiv").data("app-id"); //456htm
//屬性賦值
$("#myDiv").data("appid","666");
//最終HTML代碼
<div id="myDiv" data-appid="123" data-myname="lsxj" data-app-id="456" data-my-name="secondname"></div>
data()
的值進行修改並不會影響到DOM元素上的data-*
屬性的改變。data()
的本質實際上是將一個 「cache」 附加到了對象上,並使用了一個特殊的屬性名稱。data-appid
的值仍然爲123,由於data()只是修改了緩存的那個值,此時進行$('#myDiv').data("appid")
的操做,輸出的結果爲666.var appid = $("#myDiv").attr("data-appid");
參考資料: