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

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

作成日: 更新日:

基本的な使い方

previousElementSiblingプロパティは、HTMLやXMLドキュメントのDocument Object Model(DOM)ツリーにおいて、現在のノードの直前に位置する兄弟要素ノード(Elementノード)を保持するプロパティです。このプロパティは、DOMCharacterDataクラスのインスタンス、例えばテキストノードやコメントノードからでも、そのノードが属する親ノードの直前の要素兄弟ノードを参照する際に利用できます。

具体的には、現在のDOMCharacterDataノードと同じ親ノードを持ち、かつ現在のノードのすぐ前に位置するノードの中で、**要素ノード(DOMElement)**であるものを取得します。もし直前の兄弟ノードが存在しない場合や、直前の兄弟ノードが要素ノードではない場合(例えば、テキストノード、コメントノード、処理命令などである場合)、このプロパティはnullを返します。

このプロパティを使用することで、DOMツリーを走査し、特定の文字データノードから見てその直前にある構造的な要素を効率的に特定できます。previousSiblingプロパティがテキストノードやコメントノードを含むあらゆる種類の兄弟ノードを返すのに対し、previousElementSiblingプロパティは要素ノードに限定されるため、より洗練された要素間の関係性を取得したい場合に役立ちます。DOMツリー内の要素構造を扱うプログラミングにおいて、特定の要素間の位置関係を把握し、ナビゲーションを行う上で重要な役割を果たします。

構文(syntax)

1<?php
2$dom = new DOMDocument();
3$dom->loadHTML('<div><span>最初の要素</span>テキストノード<p>次の要素</p></div>');
4
5// HTML構造からDOMCharacterDataインスタンス(ここではDOMText)を取得します。
6// 'テキストノード' は <div> の子ノードで、<span> の直後に位置します。
7$divElement = $dom->getElementsByTagName('div')->item(0);
8$characterDataNode = $divElement->childNodes->item(1); // 'テキストノード' に相当するDOMTextノード
9
10// DOMCharacterData::previousElementSibling プロパティにアクセスし、直前の兄弟要素ノードを取得します。
11// 'テキストノード' の直前の兄弟要素ノードは <span> です。
12if ($characterDataNode instanceof DOMCharacterData) {
13    $previousElementSibling = $characterDataNode->previousElementSibling;
14
15    if ($previousElementSibling instanceof DOMElement) {
16        // 直前の兄弟要素が存在する場合、そのノード名を出力します。
17        echo $previousElementSibling->nodeName; // 出力: span
18    } else {
19        // 直前の兄弟要素が見つからない場合(例: テキストノードが最初の子の場合など)
20        echo "直前の兄弟要素は存在しません。\n";
21    }
22}

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

関連コンテンツ

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