PHP DOM Проверьте, если img внутри div - PullRequest
0 голосов
/ 15 октября 2011

Я пытаюсь сделать некоторые динамические обновления стилей CSS на сайте, и мне нужно использовать PHP поверх JavaScript.Мне нужно только стилизовать div теги, которые содержат тег img в них, и игнорировать остальные теги div.

Вот что у меня есть:


    $dom = new domDocument;
    $dom->loadHTML($test);
    $dom->preserveWhiteSpace = false;

    $divs = $dom->getElementsByTagName('div');
    foreach ($divs as $div) {
        $saveXML[] = $dom->saveXML($div);
        $childNotes[] = $div->getChildNodes;
    }

Я просто пробую два метода здесь.Проблема с параметром $saveXML заключается в том, что он дает мне весь код, включая инкапсулирующие div s.Я этого не хочу.Кроме того, с этого момента мне придется запустить регулярное выражение или что-то еще в коде, чтобы найти, содержит ли он тег img.

Опция $childNodes должна была быть лучшей, как я думал, номассив возвращается пустым.Было бы неплохо, потому что я мог бы просто попробовать что-то вроде


    if ($childNode->nodeType == 'img'){
      $div->setAttribute('class', $new_attributes);
    }

(я не думал, что этот последний бит полностью, но это общая концепция) ..

Вот примерHTML-код, который мне нужен для поиска по


    div class="image-left drop-shadow raised" style="width: 210px">
         img src="images/myimage.jpg" width="200" height="150" class="size-full" /
         p>EDIT THIS DIV's STYLE /p>
    /div>
    div class="blocktext" style="width: 150px;">
         p>DONT EDIT THIS DIVs STYLE /p>
    /div>

Любая помощь, пожалуйста ...

Ответы [ 3 ]

0 голосов
/ 15 октября 2011
0 голосов
/ 15 декабря 2012

Обычно это делается с помощью запроса Xpath :

$xp = new DOMXPath($dom)
$divsContainingImg = $xp->query('//div/img/..');
foreach ($divsContainingImg as $div)
{
    /* @var $div DOMElement */
    ...
}

. При этом будут выбраны все элементы img, которые прямые дочерние элементы divэлемент, а затем его родитель (элемент div).

0 голосов
/ 15 октября 2011

Я надеюсь, что ваш пример HTML не является фактическим HTML, который вы используете.Многие из тегов ur не заканчиваются открытием / закрытием "<".</p>

Однако, если это не так, вы можете использовать:

$childNode->getElementsByTagName('img'); 

Это вернется, если в нем есть изображение или нет, из чтения http://php.net/manual/en/domdocument.getelementsbytagname.php я понял, что оновернет список ... Я могу ошибаться, но выкладываю мысль там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...