

JavaScriptのDOM操作の基礎(初心者向け)
フロントエンドエンジニアとして働いていると、当たり前のようにJacaScriptでDOMを操作し、指定したIDの要素にclassを付与/削除したり、テキストを動的に変更したりしていると思います。
筆者である私もフロントエンドエンジニアとしてJavaScriptを頻繁に使用しているのですが、何となくJacaScriptで実装しているなと感じたので、改めてDOM操作でHTMLをどのように組み替えているのかまとめようと思います。
やりたいことがあればAIで調べれば良い時代になっていますが、具体的に何をしているの分からないと、JacaScriptでどこまでできるのか、どのようなバグが発生するかのリスクも分からないです。
改めて基本をまとめてみましたので、興味がある人は読み進めてみてください。
DOMとは何か?
正式な呼び方は、「Document Object Model」で、略してDOMです。
具体的には、VsCodeといったエディタで実装したHTMLファイルをブラウザで表示する場合、下記のように構造化されたデータ(ツリー構造)に変換されます。その構造をDOMと呼ぶのです。
HMTL(例)
<h1>タイトル</h1>
<p>これは段落です。</p>
<div>
<h2>小見出し</h2>
<p>中身のテキスト</p>
</div>
↓ブラウザで表示する時にツリー構造(DOM)に変換
Document
└── html
├── head
└── body
├── h1
│ └── #text("タイトル")
├── p
│ └── #text("これは段落です。")
└── div
├── h2
│ └── #text("小見出し")
└── p
└── #text("中身のテキスト")
上記がDOMツリーと呼ばれるものになります。
要素単位にどのように呼ばれるかというと
・ノード(Node):DOMツリーの一つ一つの点。タグも、テキストも全部がノード。
・親と子(Parent & Child):ツリー状なので、要素同士の関係性は「親子」で表せます。
・兄弟(Sibling):同じ親を持つノード同士。
となります。
JavaScriptで実装した経験のある人だと、見慣れた用語もあると思いますし、実際に親子関係を指定して操作することもありますが、上記のような構造が元になっています。
ツリー構造をイメージすることで可能なことがイメージできる
下記のような処理があるとします。
//空のHタグ削除処理
export const deleteNoTextHtag = (content: Document): Document => {
content.querySelectorAll('h2').forEach((heading) => {
heading.remove();
});
return content;
};
上記のようにh2タグを全て削除する処理ですが、下記のようにイメージすればわかりやすいと思います。
Document
└── html
├── head
└── body
├── h1
│ └── #text("タイトル")
├── p
│ └── #text("これは段落です。")
└── div
├── h2 // ←削除
│ └── #text("小見出し")
└── p
│ └── #text("中身のテキスト")
├── h2 // ←削除
│ └── #text("小見出し")
└── p
└── #text("中身のテキスト")
h2タグの箇所を全て抽出して削除するだけなので、divの中身はpタグのみとなります。
初心者の方の中には、HTMLをエディター上の文字列や文章のように理解してしまい方もおり、どのように対象を検索して、その対象に修正や削除、または新たに子要素を作成するのかイメージがつかない中でDOM操作をしている方も意外といます。
しかし、ツリー構造にしてみると、意外と単純な行為をしているとうことが分かると思います。
よく使うDOM操作メソッド
Domの操作としては、下記が使いやすいので、「こういった操作」ができると覚えておきましょう(関数名は調べれば出てきますので暗記不要です)。
document.querySelector:CSSセレクタに一致する最初の要素を取得
例):document.querySelector('.title')
document.querySelectorAll:セレクタに一致する全ての要素を取ってくる(NodeList)
例):document.querySelectorAll('p')
element.textContent:要素のテキストの取得・設定
例):heading.textContent = '新しい文字'
element.innerHTML:HTMLごと内容を操作
例):div.innerHTML = '強調'
element.remove():DOMツリーからその要素を削除
例):paragraph.remove()
document.createElement:新しい要素を作る
例):const newP = document.createElement('p')
まとめ
・DOMは、ブラウザがHTMLを理解するために構造化した「木(ツリー)」です
・各要素やテキストはノード(Node)として扱われます
・documentを通じてJavaScriptからアクセス可能で、正確・安全に操作できます
・HTMLを文字列のまま扱うより、DOMを通じて操作するほうが、構造を保ちつつ柔軟に処理できます
まずは、ブラウザの開発者ツール(F12キー)でDOM構造を確認したり、簡単なJavaScriptでDOM操作を試してみると理解が進みやすいですよ!

