12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JavaScript】DOMの基本

Last updated at Posted at 2020-03-31

##はじめに
Javascriptを学ぶ上で欠かせないDOMについて、基礎的な部分を固めたいのでまとめました。
学習サイトやなんやらでJavaScriptの文法的な基礎を学んだ後、次は?みたいな人(わたし)が多いと思います。
そんな方のステップアップに繋がるのがDOMなのかなーと思ってるので、DOM操作に慣れていければいいなと。

##目次
DOMとは
DOMで何ができるようになるのか
要素の取得をする
要素取得のメソッド
要素にアクセスして変更を加える
クラスを操作する

##DOMとは
Document Object Model」の略です。

HTMLはHTML文章と呼ばれることもあり、文章=Document。
つまりHTML(XMLなども)オブジェクトとして扱い、それを操作するためのモデルです。
その操作をすることを
DOM API や DOM と呼びます。

##DOMで何ができるようになるのか

  • JavaScriptを使ってHTMLの情報を取得・変更・イベントの登録などができる

DOMによって、JavaScriptで動的なページを作ることができるようになるということですね。

##要素の取得をする

Google Chromeの検証モード内のConsole上で確認していきます。
###HTML情報全て取得する

JavaScript
document

スクリーンショット 2020-03-31 18.01.50.png

コンソールに入力してエンターを押すと、#documentという、HTMLファイル内の情報全てを取得することができます。
スクリーンショット 2020-03-31 16.42.19.png
検証モード内のElementsの内容と一緒です。

###headタグやbodyタグなど

JavaScript

document.body

と入力することで取得できます。
スクリーンショット 2020-03-31 18.02.55.png
###bodyタグ内の要素

JavaScript
document.body.children

スクリーンショット 2020-03-31 16.53.45.png

childrenとは子要素のことで、bodyの中の子要素全てを配列のような形(HTMLCollectin)で取得することができます。

##要素取得のメソッド
###querySelector

JavaScript
document.querySelector()

このquerySelectorメソッドを使用し、HTML内のタグ、id、classなどを指定することでも取得することができます。
スクリーンショット 2020-03-31 17.59.28.png
h1タグで取得しても、idで指定しても、同じ要素が取得できます。

ちなみにquerySelectorは、上から探して最初に見つかった要素ひとつを取得するので
スクリーンショット 2020-03-31 18.08.23.png
リストが複数あっても、一番上しか取得できていないのが分かりますね。

###querySelectorAll

JavaScript
document.querySelectorAll()

対してquerySelectorAll指定した要素全てを取得します。
スクリーンショット 2020-03-31 18.10.43.png
NodeListと呼ばれる、配列のような形で取得できます。
ちなみにDOMでは要素のことをnode(ノード)と呼びます。(詳しい説明はここでは割愛)

##要素にアクセスして変更を加える
###innerHTML
innerHTMLは要素の中身にアクセスすることができます。例えば、h1タグの中身、今回でいうと"DOM操作"という文字列ですね。

JavaScript
const h1 = document.querySelector('h1')
h1.innerHTML

上のように、取得した要素をいったん変数に入れておくと楽です。
スクリーンショット 2020-03-31 18.36.59.png
これで"DOM操作"という文字列が取得できていることが分かります。

このh1.innerHTMLの中身を書き換えます。

JavaScript
h1.innerHTML = '書き換えた'

スクリーンショット 2020-03-31 18.39.00.png

すると、ブラウザ上の文字列が書き換わります。
また、innerHTMLはタグを認識するので、innerHTML内に<span>などを記述してCSSなどを指定することもできます。

JavaScript
h1.innerHTML = '書き換えた<span style="color:red">かもね</span>'

スクリーンショット 2020-03-31 18.42.52.png

このように、スタイルが適用されます。

###textConetent
textContentも要素の中身にアクセスするのですが、こちらはタグなどを無視したテキスト情報のみにアクセスします。

JavaScript
h1.textContent

スクリーンショット 2020-03-31 18.48.52.png
spanタグの中身は無視されています。

###style
styleは文字通り要素のスタイルにアクセスし、変更することができます。

JavaScript
const ul = document.querySelector('ul')
ul.style.color = 'green'

スクリーンショット 2020-03-31 20.38.31.png

ulのstyleを変更してみました。

##複数要素を取得した場合
querySelectorAllで要素全てを取得した場合のアクセス方法

###添字指定

JavaScript
const li = document.querySelectorAll('li')
li[1].style.textDecoration = 'underline'

上記のようにtext-decorationの指定などはプロパティ名がそのまま使えないものがあるので注意しましょう。

スクリーンショット 2020-03-31 20.51.37.png

配列に格納されているので、添字を指定することでアクセスできました。

###ループ文
複数要素全てにアクセスするには、ループ文が有効です。

JavaScript
li.forEach(node => node.style.color = 'purple')

querySelectorAllで取得してきた場合は、NodeListに格納されるので、そのひとつ(node)ずつにアクセスすればよいです。
スクリーンショット 2020-03-31 21.07.51.png
これでli要素全てに適用できました。

##クラスを操作する
要素の変更のほかに、ノードに対するクラス情報も取得してそれらを操作することができます。

###classList
classListにアクセスし、その要素のクラス情報を取得します。
addメソッドでクラスを追加することができます。

JavaScript
const h1 = document.querySelector('#title')
h1.classList.add('text-size')

スクリーンショット 2020-03-31 21.23.44.png
スクリーンショット 2020-03-31 21.24.04.png
elementsを確認すると、h1タグの中にtext-sizeというクラスが追加されています。

もちろんこの新しく付与されたクラスにプロパティが指定してあればそれが適用されます。
スクリーンショット 2020-03-31 21.28.06.png

またremoveメソッドを用いることで、クラスを除去したり
toggleメソッドではそれが呼ばれるたびにクラスを追加したり除去したりといったことができるようになります。

12
11
0

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
12
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?