Selector - 選擇元素
- element = document.querySelector(selectors);
- element 是
元素
物件。 - selectors 是以逗號分隔,包含一個或多個
CSS 選擇器
的字串。
- element 是
1 | //回傳第一個符合條件的元素 |
1 | //回傳符合條件的元素 |
Attribute - 增加標籤屬性
- setAttribute 設定
1 | var el = document.querySelector('.titleClass a'); |
- getAttribute 取得
1 | var el3 = document.querySelector('.titleClass a').getAttribute('href'); |
innerHTML - 插入HTML
將元素內的html重新覆蓋寫入新的html。
1 | var el = document.getElementById('main'); |
createElement - 插入dom元素
建立一個新的DOM元素,然後再使用 appendChild
新增子節點,並不會覆蓋原有的DOM元素。
1 | <h1 class="title"> |
1 | <h1 class="title"> |
要留意的是 如果
appendChild
使用時,append 上去的是一個已存在的 node 時,它會做的是搬移,而非複製,所以 appendChild 使用時要複製而非搬移,記得先使用
Node.cloneNode()
這個方法複製 Node Element。參考:PJ - Node Element 在 appendChild 後消失(disappear)!?
addEventListener - 事件氣泡、事件捕捉
基本語法
element.addEventListener(event, function, useCapture)
- 第三個參數:可省略,預設為
false
。
範例
可試試將第三個參數分別改成 true
、 false
,各執行一次,會有什麼不一樣的結果。
1 | <div class="warp"> |
1 | var el = document.querySelector('.box'); |
See the Pen addEventListener - 事件氣泡、事件捕捉 by Kanboo (@Kanboo) on CodePen.
stopPropagation - 中止冒泡行為
依上例 addEventListener-事件氣泡 因素,有時只是想單純針對單一元素監聽,不想因為事件冒泡的行為,而去觸發到其他元素,這時就可利用 stopPropagation 來達成此需求。
1 | var el = document.querySelector('.box'); |
事件監聽優化 & e.target
有時子元素可能要上千個,每個都要綁上監聽的話,效能不是很優,這時可從父節點下手,使用 e.target.nodeName 判斷是否為 想監聽的子元素,若是為想監聽的子元素,可再用 e.target.value 或是 e.target.textContent 取得 值。
- e.target.nodeName 取得點擊元素的標籤名稱,如:UL、LI、INPUT…
- e.target.value 取得選取元素的值
範例
當有一個 ul 底下有多個 li 都要監聽的話,這時我們可以利用 addEventListener-事件氣泡 的原理,只要針對 ul 監聽,讓他往上冒泡,當到達 li 時,這時我們就可以針對 li 做事了。
1 | //取得ul底下的所有li元素 |
1 | //取得ul元素 |
preventDefault - 取消預設觸發行為
比較常用在 a連結的href、Form表單的submit 上,有時可能只是想觸發呼叫Function,而不想使用到原生附與的功能的話,就可利用 preventDefault 達成此需求。
1 | var list = document.querySelector('a'); |
localStorage - 灠瀏器資料儲存
基本語法
1 | localStorage.setItem('countryItem',countryString); |
1 | localStorage.getItem('countryItem'); |
範例
localstorage 只能保存 string
資料,所以當資料非字串型態的話,記得轉為字串string
。
JSON.parse() 將 string 轉為 array
1 | var country = [ |
var data = listData;
var data2 = listData || []; //(建議寫法)
console.log(‘沒有 []’, data); // 有可能取得資料或 undefined
console.log(‘加上 []’, data2); // 有可能
data-* - 透過 dataset 讀取自訂資料
- 名字絕對不能以 xml 起頭,無論是否用於 xml、
- 名字絕對不能包含分號(U+003A)、
- 名字絕對不能包含大寫 A 到大小 Z 的拉丁字母。
可透過 HTMLElement.dataset.testValue 或 HTMLElement.dataset[“testValue”] 訪問
1 | <div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth>John Doe</div> |
AjAX
屬性
readyState:
0:尚未讀取
1:讀取中
2:已下載完畢
3:資訊交換中
4:處理完畢
Status:即HTTP協定的狀態碼
當 readyState == 4,代表有執行完成,但不一定是有正確撈到資料,
要配合HTTP status == 200,才代表是正確撈到資料。
範例
利用AJAX傳送(POST)帳號、密碼資料至後端註冊會員帳號。
1 | var send = document.querySelector('.send'); |
1 | { |