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

エレメントの取得・追加・移動・削除

 web ページのエレメント(要素)の取得、追加、移動、削除の方法についての解説です。web ページの要素を操作する方法になります。

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

 エレメントの取得に関しては以下のエレメントの取得を参照してください。

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

ページ内 Index

エレメントの取得

 エレメントを取得する方法には、メソッドまたはプロパティによる方法があります。まずメソッドによるエレメントの取得について触れます。

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

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

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

 上記の document は window を省略しており、window.document と記述することもできます。

 以下の .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");

 上記の例は class="example" をもつ <div> エレメント以下の id="content" である <p> エレメントを対象にしています。

querySelectorAll() メソッド

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

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

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

 プロパティからエレメントを取得する方法の中でよく使われる、または利用しやすいものだけを上げます。

 Element または Node のプロパティからエレメントを取得します。

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

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

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

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

Node プロパティ

 その他でよく使われる以下のような Node プロパティがあります。

プロパティ概要
.childNodes現在の子孫 NodeList を返す。変更があれば更新される
.parentNode親の Node。最上位なら null

 他にも WindowDocument のプロパティから取得する方法や、Event オブジェクトのプロパティから取得する方法があります。 詳しくはエレメントの取得方法ページを参照してください。

エレメントの追加

 エレメントの追加によってそのエレメントを表示するは以下のように、document.createElement() メソッドで新規にエレメントを作成し、.appendChild() メソッドなどによって web ページに追加する必要があります。

エレメントの追加の流れ
createElement() メソッドでエレメントの新規作成

↓
appendChild() メソッドなどでエレメントを追加

↓
表示される

 注意点として、エレメントの追加は常に子エレメントの最後尾に追加されます。

 まずはエレメントの新規作成を document.createElement() メソッドで行います。

エレメントの新規作成
var element_obj = document.createElement('p',{id:'id_',class:'css_'});
element_obj.innerHTML = "Example Text"

 document.createElement() メソッドで作成されたエレメントはドキュメント上にありますが表示はされていません。 既存のエレメントに包括することで表示されます。
 包括には以下のような .appendChild() メソッドを使用します。このメソッドによってまず指定エレメントの最後尾に追加、そして表示されます。

appendChild()
document.getElementById('container').appendChild( element_obj );

 .append() メソッドでもエレメントを追加することができます。.append() メソッドは複数の Node オブジェクトまたはテキストが引数として使用できます。

.append()
document.getElementById('container').append(' Hello! ');

 最後尾に追加したエレメントは以下の .insertBefore() メソッドで移動することができます。

 また、エレメントの追加に関して詳しくはエレメントの作成について エレメントの新規作成を参照してください。

エレメントの移動

移動

 追加したエレメントは希望する箇所に表示されるとは限りません。任意の箇所に表示したい場合は以下のメソッドを使用して位置を移動する必要があります。

 以下の.insertBefore() は、第1引数の前に第2引数のエレメントを追加します。

insertBefore()
document.getElementById('over').insertBefore( document.getElementById('after_element'), document.getElementById('inset_element') );

 .insertBefore() メソッドは第2引数を既存のエレメントに対して実行すると移動になります。

 DocumentElement、 どちらのオブジェクトでも使用できます。

置換

 エレメントの置き換えには、.replaceChild() メソッドを使用します。

replaceChild()
document.getElementById('over').replaceChild( document.getElementById('inset_element'), document.getElementById('old_element') );

 上記は Node オブジェクトのメソッドですが、HTML の各タグエレメントは HTMLElement を通してそのプロパティとメソッドを継承していますので上記のメソッドを利用することができます。

 詳しくはエレメントの作成について エレメントの移動を参照してください。

エレメントの削除

 エレメントの削除には以下の .removeChild() メソッドを使用します。

removeChild()
document.getElementById('over').removeChild( document.getElementById('example') );

 .removeChild() メソッドは DocumentElement オブジェクト、どちらでも使用できます。

innerHTML、outerHTML

 innerHTML、outerHTML プロパティに以下のような何もない文字列を設定することでエレメントを削除することもできます。

innerHTML による削除
document.getElementById('example').innerHTML = "";

 詳しくはエレメントの作成について エレメントの削除を参照してください。