PHP DOM Builder API 2.0
- Core\Element\Double
- Core\Element\DoubleBlock
- Core\Element\DoubleInline
- Core\Element\Field
- Core\Element\Root
- Core\Element\Single
- Element\A
- Element\Abbr
- Element\Address
- Element\Area
- Element\Article
- Element\Aside
- Element\Audio
- Element\B
- Element\Base
- Element\Bdi
- Element\Bdo
- Element\Blockquote
- Element\Body
- Element\Br
- Element\Button
- Element\Canvas
- Element\Caption
- Element\Cite
- Element\Code
- Element\Col
- Element\Colgroup
- Element\Command
- Element\Datalist
- Element\Dd
- Element\Del
- Element\Details
- Element\Dfn
- Element\Div
- Element\Dl
- Element\Dt
- Element\Em
- Element\Embed
- Element\Fieldset
- Element\Figcaption
- Element\Figure
- Element\Footer
- Element\Form
- Element\H1
- Element\H2
- Element\H3
- Element\H4
- Element\H5
- Element\H6
- Element\Head
- Element\Header
- Element\Hgroup
- Element\Hr
- Element\Html
- Element\I
- Element\Iframe
- Element\Img
- Element\Input
- Element\Ins
- Element\Kbd
- Element\Keygen
- Element\Label
- Element\Legend
- Element\Li
- Element\Link
- Element\Map
- Element\Mark
- Element\Menu
- Element\Meta
- Element\Meter
- Element\Nav
- Element\Noscript
- Element\Object
- Element\Ol
- Element\Optgroup
- Element\Option
- Element\Output
- Element\P
- Element\Param
- Element\Pre
- Element\Progress
- Element\Q
- Element\Rp
- Element\Rt
- Element\Ruby
- Element\S
- Element\Samp
- Element\Script
- Element\Section
- Element\Select
- Element\Small
- Element\Source
- Element\Span
- Element\Strong
- Element\Style
- Element\Sub
- Element\Summary
- Element\Sup
- Element\Table
- Element\Tbody
- Element\Td
- Element\Textarea
- Element\Tfoot
- Element\Th
- Element\Thead
- Element\Time
- Element\Title
- Element\Tr
- Element\Track
- Element\U
- Element\Ul
- Element\Variable
- Element\Video
- Element\Wbr
Baigudin Software зарегистрировала авторское право на собственную операционную систему Embedded Object Operating System
Авторское право на собственную встраиваемую объектно-ориентированную операционную систему реального времени Embedded Object Operating System зарегистрировано «Федеральной службой по интеллектуальной собственности (Роспатент)» Российской Федерации.
Поиск элементов DOM
На самом деле, DOM — иерархическая структура, и выбор его узлов только лишь по одному критерию не всегда помогает. Что, если нам необходимо выбрать все теги A, родителями которых являются заголовки H2? Или выбрать все ссылки, у которых атрибут href равен определённому значению, да ещё и лежащих в контейнере DIV? Именно для этого существует метод find.
Возьмём тот же пример документа, что и в предыдущей статье (чтобы далеко не ходить, пусть пример HTML будет тут):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<title>PHP DOM Builder test page</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
</head>
<body>
<div id="content">
<h1>
Заголовок
</h1>
<div class="article" id="id_article">
<h2>
Статья 1
</h2>
<p>
<a href="google.com">Текст 1</a>
</p>
</div>
<div class="article print">
<h2>
<a href="/article/">Статья 2</a>
</h2>
<p>
<a href="baigudin.software">Текст 2</a>
</p>
</div>
</div>
<div id="footer">
<p>
© copyright 2016
</p>
</div>
</body>
</html>
Попробуем что-нибудь найти.
<?php
$document->find('#content'); //Находим теги с id=content
$document->find('div#content'); //Находим DIV с id=content
$document->find('.article'); //Находим теги с class=article
$document->find('div.article'); //Находим DIV'ы с class=article
$document->find('.article.print'); //Находим теги с class=article и print
$document->find('h2'); //Находим теги H2
$document->find('h1, h2'); //Находим теги H1 и H2
?>
Как видите, строка запроса аналогична таблице стилей CSS. А если вспомнить, что DOM - иерархическая структура, то можно искать так:
<?php
$document->find('p a'); // Находим теги A внутри тегов P
$document->find('div h2 a'); // Находим теги A внутри тегов H2 внутри тегив P
?>
Можно искать по атрибутам:
<?php
$document->find('a[href]'); //Все ссылки с атрибутом href
$document->find('a[href=baigudin.com]'); //Все ссылки с href=baigudin.com
?>
Несложно догадаться, что метод find ищет дочерние узлы. Но есть и метод parents, который выбирает всех прямых предков узла:
<?php
//Находим теги A и выбираем у них все родительские DIV'ы с class=article:
$document->find('a')->parents('div.article');
?>
Теперь о фильтрации. Есть методы filter и not. Метод filter выбирает те узлы, которые попадают под условие, а not - которые не попадают.
<?php
//Находим теги DIV и отбираем те, у которых class равен article
$document->find('div')->filter('.article');
//Находим теги A и отбираем те, у которых href не равен baigudin.com
$document->find('a')->not('a[href=baigudin.com]');
?>
В заключение стоит сказать, что все методы find, parents, filter, not возвращают объект класса ElementList или ElementNode, которые наследуют общий интерфейс Element.