備忘録的プログラミングリファレンス

エレメントの取得方法

 web ページのエレメント(要素)の取得方法についてを網羅した解説です。
 簡易な解説はエレメントの取得・追加・移動・削除を参照してください。

 エレメントの取得には、getElementsByClassName()getElementById()getElementsByName()getElementsByTagName()、getElementsByTagNameNS()、.querySelector().querySelectorAll() といったメソッドがあります。

エレメントの取得
var element_obj = document.getElementById('example');

 他にも WindowDocument のプロパティから取得する方法や、Event オブジェクトのプロパティから取得する方法があります。

 エレメントには id、name、class といった属性があります。属性の取得については Element のプロパティとメソッドを参照してください。

ページ内 Index

注意点について

 エレメントの取得、追加、移動、削除での注意点があります。同じエレメントでありながら、NodeElementHTMLElement といった起因により思ってもいないエラーになることがあります。
 エレメントの取得、追加、移動、削除は、NodeElementHTMLElement のいずれかのメソッドを利用します。 その際に、引数や返り値が NodeElementHTMLElementNodeListHTMLCollection の違いに気づかないことがあります。 
 最新のブラウザはあまりこれらの違いは気にする必要がなくなっていますが、たまにエラーがこれらの違いによって発生します。

メソッドからエレメントの取得

 web ページを構成するエレメントの取得には WindowDocument のプロパティやメソッドから取得する方法があります。

 よく利用されるのは、Window オブジェクトから Document オブジェクトを取得し、ドキュメント中のエレメントを取得する方法です。

Document オブジェクトの取得
var element_obj = document.getElementById('Example');

 上記の document は window を省略しており、window.document と記述することもできます。
 window 部分は、<iframe> を利用した親子間の Window では利用しますので理解しておいた方がよいでしょう。(「iframe タグエレメント」参照)

メソッドからエレメントを取得

 document オブジェクトのメソッドからエレメントを取得する方法には以下があります。

メソッド概要
.getElementsByClassName()class 名をもつエレメントのリスト、 HTMLCollection を返す
.getElementById()id 名をもつエレメントを返す
.getElementsByName()name 名をもつエレメントリスト、NodeList を返す
.getElementsByTagName()指定したタグエレメントのリスト、 HTMLCollection を返す
.getElementsByTagNameNS()XML。指定した名前空間をもつエレメントのリスト、 NodeList を返す
.querySelector()引数のセレクターに一致する最初の Node を返す
.querySelectorAll()引数のセレクターに一致する NodeList を返す

 .getElementsByClassName().getElementsByTagName().querySelector().querySelectorAll() はエレメントから子エレメントを取得する場合にも使用できます。

getElementsByTagName() メソッド

 getElementsByTagName() メソッドの返り値はエレメントの配列 HTMLCollection です。

getElementsByTagName() メソッド
var element = document.getElementById('Example');
var list_element = element.getElementsByTagName("p");

querySelector() メソッド

 querySelector() メソッドの返り値は該当する最初の Element オブジェクトです。セレクターと同じ指定方法が利用できます。

querySelector() メソッド
var element_obj = element.querySelector("div.example p#content");

querySelectorAll() メソッド

 querySelectorAll() メソッドの返り値はオブジェクトのリスト NodeList です。セレクターと同じ指定方法が利用できます。

querySelectorAll() メソッド
var list_element = element.querySelectorAll("input[type='text']");

プロパティからエレメントを取得

Document プロパティ

 Document のプロパティから直接 web ページのエレメントを取得できます。プロパティから取得できるエレメントには以下があります。

プロパティ概要
.linksハイパーリンク <a> のリスト HTMLCollection の取得
.body<body>のオブジェクトハンドラー
.embeds<embed>のリスト HTMLCollection を取得
.forms<form> エレメントのリスト HTMLCollection の取得
.fullscreenElement全画面モードで表示されているエレメントの取得
.head<head>エレメントの取得
.documentElementDocumentの直下の子エレメント。通常は<html>
.images<img>のリスト HTMLCollection を取得
.scriptsスクリプト、 <script> エレメントのリストを HTMLCollection で取得
.title<title>の値であるテキストの取得と設定
.styleSheetsスタイルシートのリスト、StyleSheetList を取得
<form> エレメントの取得
var list_element = document.forms;

 個々の <form> エレメントを取得するには、リストのインデックスを利用する方法があります。

最初の <form> エレメントの取得
var element_form = document.forms[0];

Element プロパティ

 Element のプロパティにもエレメントを取得するプロパティが用意されています。相対的な関係にあるエレメントが対象のようです。

プロパティ概要
.children子エレメントを返す
.firstElementChild最初の子エレメント
.lastElementChild子エレメントの中で最後のエレメント
.nextElementSibling直後の兄弟エレメント。Element

Node プロパティ

 Node プロパティにはエレメントを取得する手段が用意されており、このインターフェイスを継承している ElementHTMLElement 以降で使用することができます。
 以下のプロパティの方がよく使われています。

プロパティ概要
.childNodes現在の子孫 NodeList を返す。変更があれば更新される
.firstChild最初の子 Node
.lastChild最後の子 Node
.nextSibling次の階層の Node
.parentNode親の Node。最上位ならnulle
.parentElement親の Element。親が Element ではない場合はnull

children プロパティ

子エレメントのリストを返す
var list_element = document.getElementById('Example').children;

 .children プロパティは子エレメントをリスト HTMLCollection で返します。

parentElement プロパティ

親エレメントを返す
var element_obj = document.getElementById('Example').parentElement;

 .parentElement プロパティは親が Element ではない場合は null を返します。

innerHTML、outerHTML

 Element の innerHTML を使用してエレメントの内容を HTML テキストで取得することもできます。

innerHTML
document.getElementById('Example').innerHTML = "<p>テスト用の段落を作成しました。</p>";

 innerHTML に値を設定することでエレメントの置き換えをすることもできますが、動作が不安定である場合があり注意が必要です。

iframe タグエレメント

 番外ですが、<iframe> エレメント内の Window から親 Document を取得するには、parent.document を使用します。

<iframe> エレメントの親 Document を取得
var parent_document = parent.document;

 window.parent.document と記述することもできます。