DOM操作について
要素の取得
html要素,head要素,body要素の取得
document.documentElement;
document.head;
document.body;
親子のノードを取得
子ノード全て
document.body.childNodes; // NodeList
最初の子ノード
document.body.firstChild;
最後の子ノード
document.body.lastChild;
親ノード
document.body.parentNode;
兄弟ノード
document.head.nextSibling;
document.head.previousSibling;
親子の要素のみを取得
子要素全て
document.body.chirdren; // HTMLCollection
最初の子要素
document.body.firstElementChild;
最後の子要素
document.body.lastElementChild;
親要素
document.body.parentElement;
兄弟要素
document.head.nextElementSibling;
document.head.previousElementSibling;
特定の要素を取得
子孫ノードから当てはまる要素1つ
cssセレクターで指定する
document.querySelector('#hoge'); // id="hoge"の要素
document.querySelector('.hoge'); // class="hoge"の要素
document.querySelector(':checked'); // checkedがついている要素
子孫ノードから当てはまる要素全て
document.querySelectorAll('.hoge'); // class="hoge"のもの全て
祖先ノードから最初に当てはまる要素1つ
document.closest('html');
指定のcssセレクタにマッチするかどうか
// ↓document.bodyはcssセレクタの'body'にマッチするか
document.body.matches('body'); // true
特定のノードを含むかどうか
*引数はノードを直接入れる必要あり
document.body.contains(document.body); // true
document.body.contains(document);// false
要素(DOM)の変更
innerHTML
中身を全て入れ替える
document.body.innerHTML = '<h1>Hello!</h1><div>I am Tom</div>'
要素を足したい時(文字列連結+=を使う)
document.body.innerHTML = '<h1>Hello!</h1><div>I am Tom</div>';
document.querySelector('div').innerHTML += '<div>I am 30years old</div>';
↑一度divの中身を空にしてから中身を入れ替えているので少し効率が悪い
insertAdjacentHTML
要素を付け足す
document.body.innerHTML = '<h1>Hello!</h1><div>I am Tom</div>';
document.querySelector('div')
.insertAdjacentHTML('挿入場所','<p>I am 30 years old.');
セキュリティ上、上記2つのメソッドは気を付ける必要あり(XSS攻撃)
ノードを作って挿入する
ノードを作る
let p = document.createElement('p');
p.textContent = 'hello';
ノードを挿入する(文字列の挿入でも使える)
append
document.querySeloctor('div').append(p);
<div>
I am Tom
ここ
</div>
prepend
document.querySeloctor('div').prepend(p);
<div>
ここ
I am Tom
</div>
before
document.querySeloctor('div').before(p);
ここ
<div>
I am Tom
</div>
after
document.querySeloctor('div').after(p);
<div>
I am Tom
</div>
ここ
appendはXSS対策されている
DOMの変更(追加)は極力ノード挿入メソッドを使う!
要素の複製
対象ノードのみ複製(default)
let p = document.createElement('p');
p.append('I am Tom');
let p2 = p.cloneNode();
document.querySelector('div').append(p2);
↓↓↓
<div>
I am Tom
<p></p>
</div>
子孫ノードまで複製(引数にtrue)
let p = document.createElement('p');
p.append('I am Tom');
let p2 = p.cloneNode(true);
document.querySelector('div').append(p2);
↓↓↓
<div>
I am Tom
<p>I am Tom</p>
</div>
要素の削除
remove
<div>
I am Tom
<p>I am Tom</p>
</div>
document.querySelector('p').remove();
↓↓↓
<div>
I am Tom
</div>
要素の置き換え
replaceWith
<div>
I am Tom
<p>I am Tom</p>
</div>
document.querySelector('p').replaceWith('<h1>hoge</h1>');
↓↓↓
<div>
I am Tom
<h1>hoge</h1>
</div>