【PHP8.x】previousElementSiblingプロパティの使い方

previousElementSiblingプロパティの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

previousElementSiblingプロパティは、Dom\Commentオブジェクトが表現するコメントノードの直前にある兄弟要素ノードを保持するプロパティです。HTMLやXMLのようなマークアップ言語では、ドキュメントの構造が木のような階層(DOMツリー)で表され、各部品はノードと呼ばれます。このノードには、<div><p>といったタグで囲まれた「要素ノード」、単なる文字列の「テキストノード」、そして「コメントノード」など様々な種類があります。

このプロパティを使用すると、現在のコメントノードと同じ階層に存在するノードのうち、直前に位置する「要素ノード」にアクセスすることができます。例えば、HTMLドキュメント内で特定のコメントの直前に配置されている<div>要素や<p>要素といった、タグで囲まれた部分の内容を取得したり操作したりしたい場合に役立ちます。

previousElementSiblingプロパティの動作は、現在のコメントノードの直前の兄弟ノードから順に遡り、最初に発見した要素ノードを返します。もし直前のノードがテキストノードや別のコメントノードであった場合、それらは無視され、さらにその前のノードが探索されます。最終的に、現在のコメントノードの前に要素ノードが存在しない場合は、このプロパティはnullを返します。

この機能は、ドキュメントの内容をPHPで動的に解析し、コメントの位置に基づいて関連する要素を特定したり、その内容を操作したりする際に非常に便利です。特定のコメントを基準にして、その直前の要素に対して何らかの処理を実行したい場合などに活用できます。

構文(syntax)

1<?php
2$html = '<div>前の要素です</div><!-- これはコメントです --><span>次の要素です</span>';
3$dom = new DOMDocument();
4$dom->loadHTML($html);
5
6$commentNode = null;
7foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) {
8    if ($node instanceof DOMComment) { // Dom\CommentはDOMCommentのエイリアスです
9        $commentNode = $node;
10        break;
11    }
12}
13
14if ($commentNode) {
15    // Dom\CommentオブジェクトのpreviousElementSiblingプロパティにアクセス
16    $previousElement = $commentNode->previousElementSibling;
17
18    if ($previousElement instanceof DOMElement) {
19        echo $previousElement->tagName; // 出力: div
20    } else {
21        echo "前の要素ノードは見つかりませんでした。\n";
22    }
23}

引数(parameters)

引数なし

引数はありません

戻り値(return)

DOM\Element|null

このプロパティは、現在のCommentノードの直前に位置する同階層のElementノードを返します。存在しない場合はnullを返します。

関連コンテンツ

関連プログラミング言語

【PHP8.x】previousElementSiblingプロパティの使い方 | いっしー@Webエンジニア