JS勉強記⑦ノードを追加

HTMLにJSを使ってノード(新しい要素/タグ、テキスト)を組み込む処理。

例題

HTMLで空のリスト・ボタンを配置。ボタンをクリックするとリストの項目が追加される。
①HTMLで空のリスト・ボタンを配置。bodyは以下の通り。

 <body>
   <ul id="lists">
   </ul>
   <input type="button" value="追加" onclick="append()">
   <script src="js/append_child.js"></script>
 </body>

ul要素のみ設定し、liは後程JSで追加する。(=空のリストの状態)

function append() { -②
 const li = document.createElement('li'); -③
 const text = document.createTextNode('追加されたテキストノード'); -④
 li.appendChild(text); -⑤
 lists.appendChild(li); -⑥
}

②onclick時の関数appendをfunction命令で宣言。
③変数liを宣言しcreateElementメソッドでliタグ/要素を生成。
④変数textを宣言しcreateTextNodeメソッドでテキストノードを生成。
※create~メソッドはあくまでも要素やテキストノードを生成するためだけのメソッドなので、後程階層に生成した要素やテキストノードを適切な改装に入れ込む処理が必要。それが後述するappendChildメソッド
⑤appendChildメソッドで③で生成したlitタグ/要素に④のテキストノードを追加。
※appendChildメソッドの基本構文は以下の通り。

element.appendChild(node);

elementに具体的な要素を記述(今回であればli要素)し、その要素に対して(node)子ノード(今回であれば④で生成したテキストノード)を追加する。
この段階で「<li>追加されたテキストノード</li>」が作成された状態。
⑥⑤で生成したli要素をidがlistsと設定されている要素(今回であればulタグ)に子ノードとして追加する。
⑦ブラウザ上で「追加」ボタンを押すと『追加されたテキストノード』という文言が追加されていく。HTMLで完成状態を記述すると以下の通り。(ボタンを3回押した状態)

<ul>
 <li>追加されたテキストノード</li>
 <li>追加されたテキストノード</li>
 <li>追加されたテキストノード</li>
</ul>

MEMO:⑥の生成したli要素を追加する処理だが、前まで使っていたgetElementメソッドで記述するほうが一般的らしい。getElementメソッドで記述する場合は以下の通り。

function append() { -②
 const li = document.createElement('li'); -③
 const text = document.createTextNode('追加されたテキストノード'); -④
 li.appendChild(text); -⑤
 const listsElement = document.getElementById( "lists" ) ; -⑥'
 listsElement.appendChild(li); -⑦'
}

②~⑤までは同じ処理なので割愛。
⑥'getElementByIdメソッドでidがlistsと設定されている要素(今回であればulタグ)を取り出すlistsElementを生成。
⑦'appendChildメソッドで⑥'で取り出したulタグの子ノードとして⑤(『追加されたテキストノード』というテキストが入ったli要素)を入れ込む。

DOMの階層の概念をもう少し理解してからじゃないと、子ノードを入れ込むという感覚がわかりにくい気がする。以下のサイトで要勉強。

<HTML>
 <body>
   <ul id="lists">
     <li>追加されたテキストノード</li>
   </ul>
 </body>
</HTML>

『追加されたテキストノード』テキストノードはli要素に対して子ノード、li要素はul要素に対して子ノード、ul要素はbody要素に対して子ノード…という風に考えれば、何のことはない気がする。が、いきなり書けと言われても難しいだろうな。

この記事が気に入ったらサポートをしてみませんか?