LoginSignup
1
3

[JavaScript] DOMの操作方法

Last updated at Posted at 2023-12-26

はじめに

今回はDOMの操作方法について学習したため、備忘録として作成しています。

ノードの追加

createElementメソッド

要素を作成するメソッド
ノードを作成するだけのため、別途ドキュメントに追加する処理が必要

createElement
document.createElement(要素名)

createTextNodeメソッド

テキストノードを作成する
ノードを作成するだけのため、別途階層に追加する処理が必要

createTextNode
document.createTextNode(テキスト)

appendChildメソッド

指定された要素を現在の要素の最後の子要素として追加する

appendChild
要素オブジェクト.appendChild(追加する子ノード)

戻り値は子ノード

例題

  • 空のリスト、ボタンを配置する
  • ボタンをクリックするとリストの項目が追加される
  • 追加される文字列は"test"とする
例題
<body>
  <ul id="list"> 
  </ul>
<input id="button" type="button" value="Add!">
<script> 
const e = document.getElementById('button');
e.addEventListener('click', () => {
  const li = document.createElement('li');
  const text = document.createTextNode('test');
  li.appendChild(text);
  const listElement = document.getElementById('list');
  listElement.appendChild(li);
}, false);
</script>
</body>

ノードを置換する

replaceChildメソッド

newChildoldChildを入れ替える(appemdChildremoveChildを同時に行う)

例題

  • リストとボタンを配置
  • ボタンをクリックするとリストの子要素を置換する処理
例題
<body>
  <ul>
    <li id="oldList">old element</li>
  </ul>
<input id="button" type="button" value="Replace">
<script> 
const e = document.getElementById('button');
e.addEventListener('click', () => {
  const newList = document.createElement('li');
  newList.setAttribute('id', 'newList');
  const newText = document.createTextNode('new element');
  newList.appendChild(newText);
  const oldList = document.getElementById('oldList');
  const parentNode = oldList.parentNode;
  parentNode.replaceChild(newList, oldList);
}, false);
</script>
</body>

ノードの削除

removeChildメソッド

指定した子ノードを取り除く

例題

  • リストとボタンを設置
  • ボタンをクリックするとリストの子要素が最後のものから削除される
例題
<body>
  <ul id="list">
    <li>element1</li>
    <li>element2</li>
    <li>element3</li>
    <li>element4</li>
    <li>element5</li>
  </ul>
<input id="button" type="button" value="Remove!">
<script> 
const e = document.getElementById('button');
e.addEventListener('click', () => {
  const parentElement = document.getElementById('list')
  const elements = parentElement.getElementsByTagName('li')
  const removeIndex = elements.length - 1;
  parentElement.removeChild(elements[removeIndex]);

}, false);
</script>
</body>

エラーが発生する理由

HTMLのファイルダウンロードが終わった後の動き

  1. HTMLページに記述されている内容をページの先頭から順にパース(解析)する
  2. DOMツリーを構築

scriptタグがあると、パースをいったん停止してscriptタグの中の JavaScript のコードが実行される
これによりまだパースが行われていない場合nullになってしまう

エラーを回避する方法

  1. HTMLページの末尾に記述する
    JavaScript のコードを要素よりもあとへ、例えば HTML ページの末尾であるbodyの直前に記述すればエラーを回避できる
  2. DOMContentLoadedイベントを利用する
    headタグ内にscripタグを記述したい場合に利用できる
  3. loadイベントを利用する
  4. scriptタグでdefer属性を設定する
    JavaScript のコードを記述した外部のファイルを読み込む場合にだけ利用できる

おわりに

今回はDOMの学習についてまとめました。

1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3