Table of Contents
前回は javascript で DOM を操作してHTMLタグを動的にページ内に追加する方法について紹介しました。
今回はページ内のタグの構造(DOMツリー)を変更したり、タグをページから削除したりする方法を紹介します。
タグの位置を変更するサンプル
既にページ内に存在するタグを移動させてDOMツリーを変更するサンプルです。
タグの移動は、前回のタグの挿入時に使用したメソッド appendChild と insertBefore で行えます。
appendChildを使ったサンプルソースコード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>DOMによるHTMLタグの移動</title> </head> <style> #party { width: 300px; height: 300px; background-color: #fdd; } </style> <body> <p id="moved">仲間になりたそうな敵</p> <div id="party"> <p>仲間1</p> </div> <button id="moveButton">仲間に加える</button> </body> <script> // タグを移動するボタン var moveButton = document.getElementById("moveButton"); // ボタンをクリックした時の処理 moveButton.addEventListener("click", function() { // 移動させる要素 var target = document.getElementById("moved"); // 移動後に親となる要素 var party = document.getElementById("party"); // タグの移動 party.appendChild(target); }, false); </script> </html>
サンプルの実行結果
ボタンを押すと、bodyタグの子要素だったpタグが、divタグの子要素となります。
「仲間になりたそうな敵」がパーティーに加わりました。
insertBeforeを使ったサンプルソースコード
class属性に「companions」を持っている複数の要素を for…of のループで一気に移動させるサンプルです。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>DOMによるHTMLタグの移動</title> </head> <style> #party { width: 300px; height: 300px; background-color: #fdd; } </style> <body> <div id="party"> <p class="companions">仲間1</p> <p class="companions">仲間2</p> <p class="companions">仲間3</p> <p class="companions">仲間4</p> <p class="companions">仲間5</p> <p class="companions">仲間6</p> </div> <button id="moveButton">解散</button> </body> <script> // タグを移動するボタン var moveButton = document.getElementById("moveButton"); // ボタンをクリックした時の処理 moveButton.addEventListener("click", function() { // 移動させる全ての要素(class属性に companions を持つ要素) var target = document.getElementsByClassName("companions"); // 現在の親要素 var party = document.getElementById("party"); // 移動後に親となる要素 var body = document.getElementsByTagName("body")[0]; // 配列 target に含まれる全ての要素に対して以下の処理を実行 for (let companion of target) { // テキスト変更 companion.innerHTML = "失業"; // タグの移動 body.insertBefore(companion, party); } }, false); </script> </html>
サンプルの実行結果
ボタンを押すと、複数の要素が一度に移動します。
このように、タグの移動は追加と同じメソッドを使って行うことができます。
DOMツリーから要素を削除
ページ内からタグを削除するサンプルです。
サンプルソースコード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>DOMによるHTMLタグの削除</title> </head> <style> #party { width: 300px; height: 300px; background-color: #fdd; } </style> <body> <div id="party"> <p class="companions">仲間1</p> <p class="companions">仲間2</p> <p class="companions">仲間3</p> <p class="companions">仲間4</p> <p class="companions">仲間5</p> <p class="companions">仲間6</p> </div> <button id="moveButton">削除</button> </body> <script> // タグを移動するボタン var moveButton = document.getElementById("moveButton"); // ボタンをクリックした時の処理 moveButton.addEventListener("click", function() { // 削除対象の要素 var party = document.getElementById("party"); // 削除対象の親要素 var body = document.getElementsByTagName("body")[0]; body.removeChild(party); }, false); </script> </html>
サンプル実行結果
削除する要素に子要素がある場合は、それも一緒に削除されます。
要素を削除するメソッド removeChild
サンプルのように、DOMツリーから要素を削除する場合は、メソッド removeChild を使います。
親要素.removeChild(削除する要素)
メソッドの名前の通り、子要素ではない要素は削除できません。
また、removeChild によって削除された要素は、ページのDOMツリーからは削除されますが、厳密には完全に削除されていません。あとで再利用することもできます。
取り除かれた子ノードはしばらくは記憶領域上に残りますが、もう DOM の一部ではありません。取り除いたノードは、oldChild オブジェクト参照を通じて、コード中で後で再利用することができます。
Node.removeChild – Web API インターフェイス | MDN
以上がjavascriptでページのHTMLタグの構造の変更および削除を行う方法です。
ピンバック: jQueryを使ったHTMLタグ構造の変更 DOMの利用(7) | JoyPlotドキュメント