gorogoronyan FC2

JavaScript: HTML 要素を取り出す

div や table などの HTML の要素を取り出す方法の話です。

querySelector() と querySelectorAll()

querySelector()querySelectorAll() は昔のブラウザにはなかった関数です。 現在では HTML 要素の取り出しはこれらの関数で間に合います。

querySelector()

Document と Element にそれぞれ querySelector() がありますが、 動作は同じなので気にしなくて良いです。 クラスが異なるので個別に用意されています。

querySelectorAll()

document.querySelector() を使う

引数で指定した条件に一致する最初の要素を返します。 取り出したい要素が 1個しかないと分かってる場合は querySelector() を使います。

条件を満たす要素が複数ある場合は 最初に見つかった要素しか返さないので注意が必要です。 複数ある場合は querySelectorAll() で処理します。

指定した ID 名の要素を取り出す

ID 名が指定された要素は HTML 内で 1個しかないので querySelector() で取り出せます。 querySelector() の引数に #ID名 を書きます。

const element = document.querySelector("#ID名");

CSS セレクタで細かく指定する

querySelector() の引数に CSS セレクタを細かく指定して要素を取り出せます。

input タグのラジオボタンで選択された項目の値を読む

ラジオボタンは input タグの type="radio" の要素で、 複数の項目の中からどれか 1つを選択できるボタンです。
input タグ: type="radio" ラジオボタン

ラジオボタン
ラジオボタン

ラジオボタンで現在選択されている項目の値も querySelector() で簡単に取り出すことができます。 ラジオボタンの場合は input 要素に name="グループ名" が設定されているのでグループ名を指定します。 :checked を付けると現在選択されている input 要素が取り出せます。

//例: ラジオボタンのグループ名が group1 の場合。
const value = document.querySelector("input[name='group1']:checked").value;

// 上の処理を分解すると?
// 1) 現在選択されている input 要素を取り出す。
const input = document.querySelector("input[name='group1']:checked");
// 2) input 要素の値を取り出す。
const value = input.value;
TestJS_input_radio03.html
input タグのラジオボタンで現在選択されている値を読む。

select タグで選択された項目の値を読み取る

TestJS_select_option01.html
select タグで選択した項目の値を読む。
HTML: select, option タグ

サンプル

TestJS_input01.html
HTML のコントロール要素のサンプル。
button タグ、input タグ、select タグなど。
HTML: input タグ
HTML: select, option タグ
TestJS_toolpanel_gameboard01.html
ツールパネルのサンプル。 fieldset タグ、legend タグのサンプル。
HTML fieldset タグ, legend タグ

querySelector() の戻り値は HTMLElement です

少しややこしい話になります。 ちょっとした Web プログラミングでは気にする必要はありません。 内部のクラス構成の細かい話です。

XML でも querySelector() が使用できます

document.querySelectorAll() を使う (2023/12)

querySelectorAll() の戻り値の処理

querySelectorAll() の戻り値は NodeList です。 NodeList の要素は for of で簡単に処理できます。

NodeList は配列 Array とは異なるので Array.indexOf() などを使いたい場合は NodeList を Array に変換することが必要です。 Array.from(NodeList)NodeList.values() を使います。

:scope> 要素名 で直下の要素を取得する

例えば ul, li がネストしているツリーの HTML で ul 直下の子の li だけ取得し、li より下の孫の li は取得したくない場合があります。 このようなときに :scope> 要素名 を指定します。
(補足) :scope> は IE11 では使えませんでした。

getElementById(), getElementsByTagName() など

getElementById(), getElementsByTagName() などの関数は querySelector() や querySelectorAll() がない時代からあった昔の関数です。 現在では処理時間が気になるような巨大な HTML ツリー以外では使う必要ありません。
JavaScript 考古学

getElementById(id名)            id 名の要素を取得する
getElementsByTagName(tag名)     tag 名の要素をリストで取得する *1)
getElementsByClassName(class名) class 名の要素をリストで取得する *1)
など

*1) 戻り値は配列(Array)ではないので注意。HTMLCollection が返ります。
  for (let key in array) でアクセスしないこと。

jQuery 風の $() 関数

document.querySelector(); では記述が長くなるので、 何度も書いていると面倒になります。 jQuery風の $() 関数に置き換えることもできます。 要素を取り出すだけであれば、これで間に合います。

関連

inserted by FC2 system