Table of Contents
前回は javascript で特定のHTMLタグの属性を追加・変更・削除する方法について紹介しました。
今回は javascript で DOM を操作してHTMLタグを動的にページ内に追加する方法について紹介します。
新しくタグを作成してページに追加するサンプル
DOMには新しくタグを作成したり、HTMLタグの階層(これをDOMツリーと呼びます)を変更したりできる機能があります。
タグの作成とページへの追加は別のメソッドで行う必要があります。
まずは、実際にページにHTMLタグを追加するサンプルのソースコードを御覧ください。
サンプルソースコード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>DOMによるHTMLタグの追加</title> </head> <body> <div id="wrapper"> <p>ここにpタグが追加される。</p> </div> <button id="addButton">pタグを追加</button> </body> <script> // タグを追加する要素をid属性を指定して取得 var target = document.getElementById("wrapper"); // タグを追加するボタン var addButton = document.getElementById("addButton"); // ボタンをクリックした時の処理 addButton.addEventListener("click", function() { // ボタンが押されたらタグを作って追加 var newTag = document.createElement("p"); // 作成したタグの中身を作成 newTag.innerHTML = "新しく追加されたpタグ。"; // 作ったタグを指定した要素の子要素として追加 target.appendChild(newTag); }, false); </script> </html>
サンプルの実行結果
ボタンを押すと、id属性 に wrapper という名前をつけたdivタグの子要素として、新しくpタグが追加されます。
既にある子要素(このサンプルでは「ここにpタグが追加される。」と書かれたpタグ)よりも後に新しく作ったpタグが追加されます。
HTMLの構造を見てみると、実際に子要素が追加されている様子がわかります。
新しくタグを作成するメソッド createElement
以下のメソッドで、指定した名前のタグを作成することができます。
document.createElement(タグの名前);
このメソッドは、作成したタグを戻り値として返すので、変数でそれを受け取ります。
// divタグを作成して変数に代入する var newDiv = document.createElement("div");
これでタグ自体の作成は完了していますが、このままでは中身も属性もありません。
したがって、今まで解説してきたプロパティ innerHTML や、メソッド setAttribute などで、タグの中身と属性を追加します。
例えば、class属性に「test」という値を持ち、中身がテキスト「テストです」というh1タグを作る場合は、以下のように書きます。
// h1タグを作成 var h1Tag = document.createElement("div"); // class属性に値「test」を追加 h1Tag.setAttribute("class", "test"); // 中身のテキストを設定 h1Tag.innerHTML = "テストです";
以上がjavascriptでDOMを利用した基本的なタグの作り方です。
作成したタグをページに追加するメソッド appendChild
タグを作成しても、ページのHTMLに追加しなければ表示されません。
作成したタグをページに追加するメソッドはいくつかありますが、最も基本的なものが appendChild です。
親要素となるタグ.appendChild(追加するタグ);
追加対象となる要素をあらかじめ取得しておく必要があります。
// タグを追加する対象の要素 var target = document.getElementById("wrapper"); // divタグを作成 var newDiv = document.createElement("div"); // 指定したタグに作ったタグを追加 target.appendChild(newDiv);
appendChild でタグを追加する場合、その追加対象となる要素の最後の子要素として追加されます。
タグ階層を作って追加する
既に子要素を持ったタグを作ってページに追加することができます。
例えば、次のように、ボタンを押すたびに表(テーブル)の行を増やすということができます。
サンプルソースコード
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>DOMによるHTMLタグの追加</title> </head> <style> table { border-collapse: collapse; } th, td { border: 1px solid #ddd; } </style> <body> <table> <tbody> <tr> <th>名前</th> <th>年齢</th> <th>性別</th> </tr> <tr> <td>ABC</td> <td>20</td> <td>男性</td> </tr> </tbody> </table> <button id="addButton">行を追加</button> </body> <script> // タグを追加する要素 var target = document.getElementsByTagName("tbody")[0]; // タグを追加するボタン var addButton = document.getElementById("addButton"); // ボタンをクリックした時の処理 addButton.addEventListener("click", function() { // trタグを作成 var tableRow = document.createElement("tr"); // 1つ目のデータをtrタグに追加 var tableData1 = document.createElement("td"); tableData1.innerHTML = "DEF"; tableRow.appendChild(tableData1); // 2つ目のデータをtrタグに追加 var tableData2 = document.createElement("td"); tableData2.innerHTML = "22"; tableRow.appendChild(tableData2); // 3つ目のデータをtrタグに追加 var tableData3 = document.createElement("td"); tableData3.innerHTML = "女性"; tableRow.appendChild(tableData3); // 作ったタグを指定した要素の子要素として追加 target.appendChild(tableRow); }, false); </script> </html>
サンプル実行結果
ボタンを押すたびに3列分のデータを持った行がテーブルに追加されます。
このように、createElement で作成した、ページに追加する前のタグにも appendChild で子要素を持たせることができるので、追加前にタグの階層を作成することができます。
このサンプルでは、挿入する行に含まれるデータは固定ですが、テキストフィールドなどと連携させて、入力したデータを表に追加するといったスクリプトを書くことも可能です。
特定の要素の前にタグを追加するサンプル
appendChild でタグを追加する場合は、追加対象のタグの最後の子要素として追加されました。
もう一つ、タグを挿入する方法について紹介します。
指定した要素の子要素となる点は同じですが、既に存在する子要素の直前に新しくタグを挿入する方法です。
サンプルソースコード
pタグを作成して、あるタグの前に挿入するサンプルです。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>DOMによるHTMLタグの追加</title> </head> <body> <div id="wrapper"> <p>この文は最初です。</p> <p id="last">この文が最後になります。</p> </div> <button id="addButton">行を追加</button> </body> <script> // タグを追加する要素 var target = document.getElementById("wrapper"); // タグを追加するボタン var addButton = document.getElementById("addButton"); // ボタンをクリックした時の処理 addButton.addEventListener("click", function() { // 追加するタグの作成 var pTag = document.createElement("p"); pTag.innerHTML = "新しい文"; // 作ったタグを指定した要素の子要素として追加 // id属性 が last の要素の前に挿入 target.insertBefore(pTag, document.getElementById("last")); }, false); </script> </html>
サンプル実行結果
特定の要素の直前にタグを挿入するメソッド insertBefore
サンプルのように、指定要素の直前にタグを追加する場合は、メソッド insertBefore を使用します。
親要素となるタグ.insertBefore(追加するタグ, 基準となるタグ);
これで、第2引数で指定した要素の直前にタグが挿入されます。
上のサンプルでは、id属性に last という値を持つ要素が基準となります。
以上がjavascriptでタグを作成してページに追加する方法です。
次回は、HTML階層内のタグの移動方法とページ内からタグを削除する方法について紹介します。
ピンバック: javascriptでHTMLタグの属性を変更する DOMの利用(4) | JoyPlotドキュメント
ピンバック: javascriptでページ内のHTML構造の変更やタグの削除 DOMの利用(6) | JoyPlotドキュメント
ピンバック: [JavaScript] フォームを使わずXMLHttpRequestでPOSTで送信 - JoyPlotドキュメント