
data-*
簡單來說,就是可以在 HTML 標籤內直接新增物件的寫法,並透過 data-* 可以帶入想要的值。
藉由增加 data-_ 屬性,即使是普通的 HTML 元素也能變成複雜而強大程式物件。例如說遊戲裡面的太空船精靈 能成為帶有 class 與數個 data-_ 屬性的 <img> 元素:
1 | <img |
dataset
透過 JS 的可以綁定 data-* 並取出中的值。
HTML
寫一個範例,在 li 中自訂 data-* 新增兩個項目與值:
1 | <ul class="list"> |
當今天點選到 li 時,要取出 .list 裡面的 li 的 data-* 的值。
透過監聽事件,
JavaScript
1 | var list = document.querySelector(".list"); |
codepen:https://codepen.io/hnzxewqw/pen/abZZaKb?editors=1111
dataset + Array
透過 dataset 可以實現取得 Array 資料的方式,會結合之前所學的綜合應用。
練習主題
目前有一個資料,裡面有商店店長的名字,透過 data-* 自定義名稱,透過 JS 抓出資料後並渲染置網頁。
得到的條件有:
- JSON 資料。
- 要使用 data-* 命名。
- 使用 for 迴圈抓出店長資料。
- 使用 innerHTML 渲染網頁。
JSON 資料
1 | var shops = [{ |
HTML 架構
1 | <ul class="list"></ul> |
JS
1 | var list = document.querySelector(".list"); |
前面有學習過,如果綁定多個 li,就要建立許多監聽事件,也可以這樣寫,但會降低網頁效能,所以這邊直接綁定父元素去控制子元素。
因為要透過 JS 動態加入 li 到網頁上,所以增加一個更新清單函式並且執行它,讓這個函式裡面去跑 for 迴圈,將 JSON 中所需要的資料抓出來,在透過 innerHTML 印在 li 中,更新於網頁上。
1 | function updateList() { |
在剛剛綁定的 list 變數中增加監聽事件:
1 | list.addEventListener("click", checkList, false); |
渲染後的值在滑鼠點擊 li 的時候,可以增加滑鼠事件,在點擊後可以知道點擊到的內容是什麼。
1 | function checkList(e) { |
這樣就可以透過 dataset 的方式,去選取在 HTML 中使用 data-* 的方式,取得 Array 的資料內容!