Skip to content

Как получить только дочерние элементы (без рекурсивного поиска) ? (аналог children(selector) из jquery?) #184

Open
@rusproject

Description

Представим ситуацию, у нас таблица, а внутри её ячеек есть ещё таблицы.

$table = new \DiDom\Element('table');

$table->setInnerHtml('
<tr>
    <td>Строка 1 Ячейка 1</td>
    <td>Строка 1 Ячейка 2</td>
    <td>
        <table>
            <tr>
                <td>Субтаблица: Строка 1 Ячейка 1</td>
                <td>Субтаблица: Строка 1 Ячейка 2</td>
            </tr>
            <tr>
                <td>Субтаблица: Строка 2 Ячейка 1</td>
                <td>Субтаблица: Строка 2 Ячейка 2</td>
            </tr>
        </table>
    </td>
</tr>
<tr>
    <td>Строка 2 Ячейка 1</td>
    <td>Строка 2 Ячейка 2</td>
</tr>
');

Как нам получить только элементы <td> из самого элемента $table, но не из его дочерних элементов?

Поскольку метод find('tr > td') даёт нам все вложенные элементы <td>

$tds = $table->find('tr > td');

$result = [];

foreach ($tds as $td) {
    $result[] = $td->text();
}

$result:

Array
(
    [0] => Строка 1 Ячейка 1
    [1] => Строка 1 Ячейка 2
    [2] => 
                Субтаблица: Строка 1 Ячейка 1
                Субтаблица: Строка 1 Ячейка 2
            
                Субтаблица: Строка 2 Ячейка 1
                Субтаблица: Строка 2 Ячейка 2
    
    [3] => Субтаблица: Строка 1 Ячейка 1
    [4] => Субтаблица: Строка 1 Ячейка 2
    [5] => Субтаблица: Строка 2 Ячейка 1
    [6] => Субтаблица: Строка 2 Ячейка 2
    [7] => Строка 2 Ячейка 1
    [8] => Строка 2 Ячейка 2
)

А нужно:

Array
(
    [0] => Строка 1 Ячейка 1
    [1] => Строка 1 Ячейка 2
    [2] => 
                Субтаблица: Строка 1 Ячейка 1
                Субтаблица: Строка 1 Ячейка 2
            
                Субтаблица: Строка 2 Ячейка 1
                Субтаблица: Строка 2 Ячейка 2

    [3] => Строка 2 Ячейка 1
    [4] => Строка 2 Ячейка 2
)

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions