【PHP8.x】getElementByIdメソッドの使い方

getElementByIdメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getElementByIdメソッドは、HTMLドキュメント内で特定のid属性を持つ要素を取得するメソッドです。このメソッドはDom\HTMLDocumentクラスに属しており、PHPのDOM拡張機能の一部としてPHP 8環境で提供されています。Webページを構成するHTMLドキュメントをプログラムでオブジェクトとして扱い、その内容を効率的に操作する際に利用されます。

このメソッドは、引数として検索したいHTML要素のid属性の値を文字列で受け取ります。Dom\HTMLDocumentオブジェクトが表現するHTML構造全体の中から、与えられたid属性値と完全に一致する要素を探索します。HTMLの仕様ではid属性はドキュメント内で一意であるべきとされていますが、このメソッドは最初に見つかった一致する要素を返します。

検索の結果、指定されたidを持つ要素がドキュメント内に見つかった場合、その要素を表すDom\Elementオブジェクトを戻り値として返します。このDom\Elementオブジェクトを通じて、取得した要素の属性を読み書きしたり、テキスト内容を変更したり、子要素を追加または削除したりといった詳細なDOM操作が可能になります。もし、指定されたidを持つ要素がドキュメント内に一つも見つからなかった場合は、nullを返します。

このメソッドは、Webアプリケーションにおいて特定のUI要素やコンテンツブロックにアクセスし、動的にその状態を更新したり、表示を切り替えたりする際に非常に有用です。例えば、ユーザーの操作に応じて特定の表示エリアの内容を更新する場合や、特定の属性を持つ要素に対してCSSクラスを追加・削除するといった処理に活用できます。これにより、HTML構造を直接解析することなく、シンプルかつ効率的に目的の要素へアクセスし、Webページの動的な操作を実現できます。

構文(syntax)

1<?php
2
3$document = new Dom\HTMLDocument();
4$document->loadHTML('<div id="exampleElement"></div>');
5
6$elementId = 'exampleElement';
7$element = $document->getElementById($elementId);
8
9?>

引数(parameters)

string $elementId

  • string $elementId: 取得したいHTML要素のIDを指定する文字列

戻り値(return)

?Dom\Element

指定されたIDを持つ要素を取得します。要素が存在しない場合は null を返します。

サンプルコード

PHP DomDocumentでidからvalue値を取得する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * HTML文字列から指定されたIDを持つ要素のvalue属性値を取得します。
7 *
8 * @param string $htmlContent 検索対象のHTML文字列 (UTF-8)。
9 * @param string $elementId   取得したい要素のID属性値。
10 * @return string|null 要素とvalue属性が見つかればその値を返し、それ以外はnullを返します。
11 */
12function getInputValueById(string $htmlContent, string $elementId): ?string
13{
14    // Dom\HTMLDocumentのインスタンスを生成します。
15    $doc = new Dom\HTMLDocument();
16
17    // getElementById() を有効にするには、パース時の妥当性検証が必要です。
18    // この設定がないと、getElementById() は常に null を返します。
19    $doc->validateOnParse = true;
20
21    // HTML5のタグなどで発生するパースの警告を抑制します。
22    libxml_use_internal_errors(true);
23
24    // HTML文字列を読み込みます。
25    // 日本語などのマルチバイト文字が化けないように、XML宣言でエンコーディングを指定します。
26    $doc->loadHTML('<?xml encoding="utf-8" ?>' . $htmlContent);
27
28    // 指定されたIDを持つ要素を取得します。
29    // 戻り値は Dom\Element オブジェクトか、見つからない場合は null となります。
30    $element = $doc->getElementById($elementId);
31
32    // 要素が取得できた場合のみ処理を続行します。
33    if ($element !== null) {
34        // 要素の value 属性の値を取得して返します。
35        // 属性が存在しない場合、getAttribute()は空文字列を返します。
36        return $element->getAttribute('value');
37    }
38
39    // 要素が見つからなかった場合は null を返します。
40    return null;
41}
42
43// --- 以下、サンプルコードの実行部分 ---
44
45// 検索対象となるHTML文字列を定義します。
46// getElementById() を正しく機能させるには、<!DOCTYPE> 宣言を含めることが強く推奨されます。
47$html = <<<HTML
48<!DOCTYPE html>
49<html lang="ja">
50<head>
51    <meta charset="UTF-8">
52    <title>ユーザー情報フォーム</title>
53</head>
54<body>
55    <form>
56        <label for="user_name">ユーザー名:</label>
57        <input type="text" id="user_name_input" name="user_name" value="山田 太郎">
58    </form>
59</body>
60</html>
61HTML;
62
63// 取得したい要素のIDを指定します。
64$targetId = 'user_name_input';
65
66// 関数を実行してvalue値を取得します。
67$value = getInputValueById($html, $targetId);
68
69// 結果を出力します。
70if ($value !== null) {
71    echo "ID '{$targetId}' を持つ要素の value 属性値は: '{$value}'" . PHP_EOL;
72} else {
73    echo "ID '{$targetId}' を持つ要素は見つかりませんでした。" . PHP_EOL;
74}
75
76?>

このサンプルコードは、PHPのDom\HTMLDocumentクラスを使い、HTML文字列内から特定のIDを持つ要素を検索し、そのvalue属性の値を取得する方法を示しています。

中心となるのはgetElementByIdメソッドです。このメソッドは、引数で指定されたID文字列($elementId)を持つHTML要素を探します。要素が見つかった場合は、その要素を表すDom\Elementオブジェクトを返り値として返します。もし該当する要素がなければnullを返します。

このメソッドを正しく機能させるには、HTMLを読み込む前にvalidateOnParseプロパティをtrueに設定することが不可欠です。この設定を行わないと、getElementByIdは常にnullを返してしまうため注意が必要です。

要素の取得に成功すると、getAttribute('value')メソッドを呼び出すことで、目的のvalue属性の値を取り出すことができます。このように、getElementByIdはHTML文書から特定の部品を正確かつ効率的に見つけ出すための重要な機能です。

getElementByIdメソッドを正しく使うには、いくつかの事前準備が重要です。最も注意すべき点は、validateOnParseプロパティをtrueに設定することです。この設定がないと、IDが存在しても要素が取得できず、常にnullが返ってしまいます。日本語などの文字化けを防ぐには、loadHTMLメソッドに渡すHTMLの先頭にXMLエンコーディング宣言を追加します。また、HTML5の構文解析で発生する警告はlibxml_use_internal_errors(true)で抑制するのが一般的です。getElementByIdは要素が見つからない場合にnullを返すため、必ずnullチェックを行ってから属性値を取得してください。

【PHP8.x】getElementByIdメソッドの使い方 | いっしー@Webエンジニア