これまでの章では、JavaScriptの基本的な文法、関数、イベントなどを学んできました。この章では、いよいよJavaScriptの真骨頂、HTMLの要素を操作する方法を学びましょう。
1. DOM って何?
DOM(Document Object Model)とは、HTMLやXML文書をプログラムから操作するための仕組みです。ウェブブラウザは、HTML文書を読み込むと、その構造を解析して、オブジェクトのツリーとしてメモリ上に展開します。このオブジェクトのツリーがDOMです。
DOMのイメージを掴むために、簡単なHTML文書を例に考えてみましょう。
html
<!DOCTYPE html>
<html>
<head>
<title>DOMの例</title>
</head>
<body>
<h1>見出し</h1>
<p>段落</p>
</body>
</html>
このHTML文書をブラウザが読み込むと、以下のようなDOMツリーが作られます。
Document
|
html
/ \
head body
/ / \
title h1 p
| | |
"DOMの例" "見出し" "段落"
このツリーの各ノード(節)が、HTMLの要素やテキストに対応するオブジェクトです。JavaScriptでは、これらのオブジェクトを操作することで、HTMLの内容を変更したり、スタイルを変えたり、新しい要素を追加したりすることができるのです。
つまり、DOMはJavaScriptとHTMLの架け橋のような存在です。DOMがあるおかげで、JavaScriptはHTMLを自由に操ることができるのです。
2. 要素を取得する
JavaScriptでHTMLを操作するには、まず操作したい要素を取得する必要があります。要素を取得するには、主に以下のような方法があります。
document.getElementById()
document.getElementById()
は、ID属性を使って要素を取得するメソッドです。HTMLのid
属性は、ページ内で一意(ユニーク)である必要があるため、特定の要素をピンポイントで取得したい場合に便利です。
javascript
const element = document.getElementById(id名);
id名
: 取得したい要素のid
属性の値を文字列で指定します。
例えば、以下のようなHTMLがあるとします。
html
<div id="myDiv">これはdiv要素です</div>
このdiv
要素を取得するには、以下のように書きます。
javascript
const myDiv = document.getElementById("myDiv");
console.log(myDiv); // <div id="myDiv">これはdiv要素です</div>
myDiv
という変数に、id
がmyDiv
である要素が格納されます。
document.querySelector()
document.querySelector()
は、CSSセレクタを使って要素を取得するメソッドです。最初にマッチした要素だけを取得します。
javascript
const element = document.querySelector(CSSセレクタ);
CSSセレクタ
: 取得したい要素を指定するCSSセレクタを文字列で指定します。
例えば、以下のようなHTMLがあるとします。
html
<p class="myParagraph">段落1</p>
<p class="myParagraph">段落2</p>
<p id="special">段落3</p>
class
がmyParagraph
である最初のp
要素を取得するには、以下のように書きます。
javascript
const firstParagraph = document.querySelector(".myParagraph");
console.log(firstParagraph); // <p class="myParagraph">段落1</p>
id
がspecial
であるp
要素を取得するには、以下のように書きます。
javascript
const specialParagraph = document.querySelector("#special");
console.log(specialParagraph); // <p id="special">段落3</p>
document.querySelectorAll()
document.querySelectorAll()
は、CSSセレクタを使って、マッチするすべての要素を取得するメソッドです。
javascript
const elements = document.querySelectorAll(CSSセレクタ);
CSSセレクタ
: 取得したい要素を指定するCSSセレクタを文字列で指定します。
例えば、先ほどのHTMLから、class
がmyParagraph
であるすべてのp
要素を取得するには、以下のように書きます。
javascript
const allParagraphs = document.querySelectorAll(".myParagraph");
console.log(allParagraphs); // NodeList(2) [p.myParagraph, p.myParagraph]
allParagraphs
という変数には、マッチした要素のリスト(NodeList
)が格納されます。
NodeList
と配列の違い
document.querySelectorAll()
が返すNodeList
は、配列とよく似ていますが、厳密には異なります。NodeList
には、配列のメソッド(push
やpop
など)がありません。
NodeList
を配列に変換するには、Array.from()
を使います。
javascript
const allParagraphsArray = Array.from(allParagraphs);
これで、allParagraphsArray
は配列になり、配列のメソッドを使えるようになります。