Редактировать и манипулировать классом и данными-атрибутами элементов DOM с помощью PHP

0

У меня есть некоторые фрагменты HTML, полученные через PHP/JSON, такие как:

<div>
  <p>Some Text</p>
  <img src="example.jpg" />
  <img src="example2.jpg" />
  <img src="example3.jpg" />
</div>

Я загружаю его с помощью DOMDocument() и xpath и хотел бы иметь возможность манипулировать им, чтобы добавить ленивую загрузку к изображениям следующим образом:

<div>
  <p>Some Text</p>
  <img class="lazy" src="blank.gif" data-src="example.jpg" />
  <img class="lazy" src="blank.gif" data-src="example2.jpg" />
  <img class="lazy" src="blank.gif" data-src="example3.jpg" />
</div>

Это подразумевает:

  1. Добавить класс .lazy
  2. Добавить атрибут data-src из оригинального атрибута src
  3. Изменить атрибут src на blank.gif

Я пытаюсь сделать следующее, но он не работает:

foreach ($xpath->query("//img") as $node) {
  $node->setAttribute( "class", $node->getAttribute("class")." lazy");
  $node->setAttribute( "data-src", $node->getAttribute("src"));
  $node->setAttribute( "src", "./inc/image/blank.gif");
}

но он не работает.

Теги:
xpath

1 ответ

1
Лучший ответ

Ты уверен? Для меня работает следующее.

<?php

$html = <<<EOQ
<div>
  <p>Some Text</p>
  <img src="example.jpg" />
  <img src="example2.jpg" />
  <img src="example3.jpg" />
</div>
EOQ;

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);

foreach ($xpath->query('//img') as $node) {
    $node->setAttribute('class', $node->getAttribute('class') . ' lazy');
    $node->setAttribute( "data-src", $node->getAttribute("src"));
    $node->setAttribute( "src", "./inc/image/blank.gif");
}

echo $dom->saveHTML();
  • 0
    О, дорогой, это одна из тех поздних ночей, когда я просто час редактировал неправильное включение ... Я оставлю это здесь на всякий случай, если это кому-нибудь поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню