Разделите HTML-тэги и его содержание

Нет никакого автономного правильного ответа на этот вопрос. Это зависит от требований Вашего приложения, предпочтений и навыков Ваших разработчиков и фазы луны.

15
задан Gumbo 4 October 2009 в 10:15
поделиться

2 ответа

Попробуйте удалить промежутки непосредственно из дерева DOM.

$dom = new DOMDocument();
$dom->loadHTML($string);
$dom->preserveWhiteSpace = false;

$elements = $dom->getElementsByTagName('span');
while($span = $elements->item(0)) {       
   $span->parentNode->removeChild($span);
}

echo $dom->saveHTML();
9
ответ дан 1 December 2019 в 04:58
поделиться

@ile - У меня была эта проблема - это потому, что индекс итератора foreach счастливо продолжает увеличиваться, в то время как вызов removeChild () в DOM, похоже, также удаляет узлы из DomNodeList ( $ пролеты). Таким образом, для каждого удаляемого промежутка nodelist сжимает один элемент, а затем увеличивает его счетчик foreach на единицу. Общий результат: пропускается один диапазон.

Я уверен, что есть более элегантный способ, но я сделал это так - я переместил ссылки из DomNodeList во второй массив, где они не будут удалены Операция removeChild ().

    foreach($spans as $span) {
        $nodes[] = $span;
    }
    foreach($nodes as $span) {
        $span->parentNode->removeChild($span);
    }
1
ответ дан 1 December 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: