jQuery Data

HTML5 新增了 data-* 自定義屬性 (data attributes),讓我們可以任意讀寫資料在元素上,而且不會影響頁面的 layout。

例如,我們可以像這樣自定義 data 屬性:

<article
  id="electriccars"
  data-columns="3"
  data-index-number="12314"
  data-parent="cars">
  ...
</article>

jQuery 也提供了方便的函式來處理這些綁定在特定元素上的資料。

.data(key)

如何取得元素上的資料?

// HTML
<div data-role="page" data-last-value="43" data-hidden="true"></div>
// jQuery
$('div').data('role') === "page";
$('div').data('lastValue') === 43;
$('div').data('hidden') === true;
jQuery 會自動將 string 轉型成相應的 JavaScript value (像上面的例子 number 和 boolean 值)

你還可以在 data-* 屬性裡使用 JSON 語法

如果 data attribute 的值是 {[ 開頭,jQuery 會自動幫你當 JSON 來解析成 JavaScript Object/Array。

例如

// HTML
<div data-options='{"name":"John"}'></div>
// jQuery
$('div').data('options').name === 'John';

.data(key, value)

除了使用 HTML data-* 屬性,jQuery 也讓我們可以很彈性的綁定任意資料到特定元素上面。

$('#foo').data('foo', 52);
$('#foo').data('bar', {myType: 'test', count: 40});
$('#foo').data({baz: [1, 2, 3]});

$('#foo').data('foo'); // 52
// 也可以一次拿元素上面綁定的所有資料
$('#foo').data(); // {foo: 52, bar: {myType: 'test', count: 40}, baz: [1, 2, 3]}

.removeData([name])

.removeData() 可以用來移除透過 jQuery 綁定在元素上的資料。(但不會刪除 HTML 上的 data-* 屬性)

$('div').data('test1', 'VALUE-1');
$('div').data('test2', 'VALUE-2');

$('div').removeData('test1');
// 沒指定 key 代表刪除這元素上面所有綁定的資料
$('div').removeData();