當HTML的標籤中有多個預設的attribute
,而DOM也會有相對應的properties
可以使用,但是要注意的是,有時attribute
跟properties
的值有時候不一定是對應的,例如input
中預設value``attribute
,但在使用者輸入或者重新覆值之後,就會把原本設定的value
內容覆蓋過去。
當想實際在DOM中修改最原始的元素attribute
時,需要方法來更改。
使用這個方法時,會回傳一組NamedNodeMap
物件,是屬性節點的動態集合。
<div about="attribute"></div>
const div = document.querySelector('div');
console.log(div.attributes)
這兩個方法看起來很像,但實際上意思不太一樣。hasAttributes()
是問指定的元素有沒有任何自行寫上去的attribute
,並回傳一個Boolean
,即使是自己寫的自創attribute
也會是true
。
<!-- 使用自創的標籤 -->
<div about="attribute"></div>
const div = document.querySelector('div');
console.log(div.hasAttributes());//true
hasAttribute()則需要在括號中加上attribute
,判斷指定的元素中是否有該attribute
。
<div about="attribute"></div>
const div = document.querySelector('div');
console.log(div.hasAttribute('about'));//true
setAttribute()
是設定指定元素attribute
的方法,假如attribute
在元素中不存在,就會新增attribute
跟值,如果attribute
已經在元素中,就會更新值。
const div = document.querySelector('div');
//新增`attribute`跟值
div.setAttribute('id',1);
console.log(div.hasAttribute('id'))//true
//更改`attribute`跟值
div.setAttribute('id',2);
console.log(div.id)//2
這個方法可以回傳指定元素attribute
的值,如果attribute
不存在,就會回傳null
。
<div></div>
const div = document.querySelector('div');
console.log(div.getAttribute('about'))//null
div.setAttribute('id',2);
console.log(div.getAttribute('id'));//2
移除指定的元素attribute
,如果指定的attribute
不存在,會回傳一個undefined
。
const div = document.querySelector('div');
console.log(div.removeAttribute('about'));//undefined
div.setAttribute('id',2);
console.log(div.removeAttribute('id'));//undefined
console.log(div.getAttribute('id'));//null
當想要使用自定義的attribute
,可以使用dataset來新增,當我們需要使用這個attribute
時,名稱前面需要在前綴加上data-
。
比方說我在<div>
內加上自己設定的attribute
:
<div data-id='1'></div>
當我想存取這個attribute
時,需要使用到dataset
,後面再加上自訂的名字:
const div = document.querySelector('div');
console.log(div.dataset.id);//1
HTML data-* Attributes
Attributes and properties