【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)
戻り値なし
戻り値はありません