「属性の取得(getAttribute)」—DOM 読み取りの要点まとめ
Element#getAttribute(name) は、要素ノードの属性値を文字列として取得するための標準メソッドです。見た目のテキストやプロパティではなく、マークアップ上の “属性” を読み取る点が重要です。
基本構文と戻り値
-
引数
nameは属性名(HTML では慣例として小文字を使う)。 -
戻り値は文字列。属性が存在しない場合は
nullを返す(空文字""と区別)。
getAttribute と “要素プロパティ” の違い
getAttribute と “要素プロパティ” の違いDOM には、属性(attribute) と プロパティ(property) の二層があります。
| 対象 | 例 | 型 | 変化の反映 |
|---|---|---|---|
| 属性(マークアップ) | getAttribute('value') |
文字列 or null | マークアップ上の値(初期値) |
| プロパティ(JS から触る値) | input.value |
型付き(文字列/数値/真偽) | 現在値(ユーザー操作やスクリプトで変化) |
代表例:
-
input.value: 入力中の現在値。
input.getAttribute('value'): HTML に書かれていた初期値。 -
a.getAttribute('href'): 記述そのまま(相対 URL のまま)。
a.href: ブラウザが解決した絶対 URL。 -
el.getAttribute('style'): 文字列の CSS。
el.style:CSSStyleDeclarationオブジェクト。
実務の目安
-
マークアップそのものを読みたい →
getAttribute。 -
現在の状態を知りたい / 型安全に扱いたい → プロパティ(
value,checked,hrefなど)。
存在確認や関連メソッド
空文字と null の違い
hasAttribute(...) === false→ 属性そのものが無い
getAttribute(...) === ""→ 属性はあるが値が空(class=""など)
真偽(ブール)属性の扱い
HTML の ブール属性(disabled, checked, required など)は、存在の有無で意味が決まります。
結論
-
ブール属性の判定は
hasAttribute()か要素プロパティ(el.disabled等)を使うのが安全。
data-* 属性と dataset
data-* 属性と datasetカスタムデータは data-* で埋め込みます。
-
datasetは使いやすいが 文字列型。必要なら数値変換する。 -
ハイフン区切り → camelCase に変換される点に注意(
data-user-name→dataset.userName)。
名前空間つき属性(SVG / XML)
SVG などでは 名前空間 を持つ属性があり、getAttributeNS(ns, localName) を使う場合があります。
-
HTML 文脈の通常属性は
getAttributeで十分。 -
XML/SVG では 大文字小文字が区別される点にも注意。
ケース感度と正規化の注意
-
HTML 属性名は ASCII 範囲で 大文字小文字非区別(慣例として小文字で指定すると安全)。
-
getAttribute('href')は 記述どおりの文字列を返す(相対 URL のまま)。絶対 URL が欲しい場合はel.hrefを使う。
実用スニペット集
1) 属性の安全な読み取り(存在チェック込み)
2) data-* で動作を切り替える
3) 相対 URL をそのまま使いたい/絶対 URL が欲しい
4) 入力要素の “初期値” と “現在値”
5) ブール属性(存在で判断)
よくある落とし穴
-
nullと空文字の取り違え
存在しない →null、存在するが空 →""。条件分岐で誤判定しがち。 -
プロパティと混同
hrefやvalueは、今の状態が欲しければプロパティ、記述値が欲しければgetAttribute。 -
ブール属性の値比較
getAttribute('checked') === "checked"のような比較は不安定(""の場合も)。hasAttributeまたはプロパティを使う。 -
classとclassName
getAttribute('class')は文字列、el.classListはトークン操作に便利。 -
SVG/XML の大文字小文字
HTML と違い ケースセンシティブ。必要に応じてgetAttributeNSを使う。
まとめ
-
getAttribute(name) は属性文字列を返す。無い場合は null。
-
現在値が欲しいならプロパティ(value, checked, href, style など)を優先。
-
ブール属性は存在で判断(hasAttribute or プロパティ)。
-
URL は getAttribute(‘href’)(記述どおり)と el.href(絶対 URL)を使い分ける。
-
data- は* getAttribute と dataset の両方を使い分け可能。
ChatGPT5 生成日:2025/09/11