2016-11-13 7 views
1

У меня есть некоторые дивы:Удаление DIV определенного класса

<h4>Ruby on Rails</h4> 
<div class="progress-bar green"> 
    <span style="width: 90%"></span> 
</div> 
<h4>HTML/CSS</h4> 
<div class="progress-bar orange"> 
    <span style="width: 80%"></span> 
</div> 
<h4>PHP</h4> 
<div class="progress-bar orange"> 
    <span style="width: 60%"></span> 
</div> 
<h4>Javascript</h4> 
<div class="progress-bar red"> 
    <span style="width: 40%"></span> 
</div> 

Я хочу использовать PHP, чтобы удалить DIV появляющийся с классом «прогресс-бар» в HTML код страницы. как:

Если я file_html.php с каким-то кодом, я получить его HTML-код, используя следующую строку:

$html = file_get_contents('file_html.php'); 

А теперь я хочу, чтобы удалить прогресс-бар диву, возникающую в коде. Возможно ли это, если да, то как я могу решить проблему? Спасибо заранее.

+1

Что вы пробовали? Что вы используете для синтаксического анализа html, или вы надеетесь рассматривать его как строку? –

+0

@yardpenalty нет, если он хочет сделать эту серверную сторону в php? –

+0

Именно поэтому я удалил комментарий. Если он всегда получает содержимое файла, он может использовать jQuery в '$ (document) .ready' tho – yardpenalty

ответ

2

Я предложил бы использовать the DOMDocument class

С you cannot remove an element from a list while iterating, а затем создать массив, чтобы быть удаленным и падение тех, после поиска.

Here's a working fiddle.

<?php 
$html = file_get_contents('file_html.php'); 

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

$divs = $dom->getElementsByTagName('div'); 
foreach ($divs as $div) { 
    $class = $div->getAttribute('class'); 
    if (strpos($class, 'progress-bar') !== false) { 
     $domElemsToRemove[] = $div; 
    } 
} 

foreach($domElemsToRemove as $domElement){ 
    $domElement->parentNode->removeChild($domElement); 
} 

echo $dom->saveHTML(); 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
 
<html><body><h4>Ruby on Rails</h4> 
 

 
<h4>HTML/CSS</h4> 
 

 
<h4>PHP</h4> 
 

 
<h4>Javascript</h4> 
 
</body></html>

+1

Я думаю, что OP хочет удалить весь div. – chris85

+0

Да, я хочу удалить весь div. Извините, что вопрос был неправильным. – NaMo

+0

@ user6803164 кричит, извините, я слишком быстро прочитал вопрос. Я обновил свой ответ. –

0

Вы должны сделать это, используя HTML-парсер:

Использование https://github.com/paquettg/php-html-parser

$dom = new Dom; 
$html = file_get_contents('file_html.php'); 
$dom->load($html); 
foreach($a as $dom->find('.progress-bar')) { 
    $a->delete(); 
    unset($a); 
} 
echo $dom; 

Если вы хотите сделать это с помощью строки (не рекомендуется):

echo preg_replace('/(<div class=.*?progress\-bar.*?<\/div>)/s', '', $html); 

Вы могли бы сделать это регулярное выражение более/менее ограничительным в зависимости от вашего сценария использования.

+0

Полученная ошибка: Неустранимая ошибка: не удается использовать возвращаемое значение метода в контексте записи в C: \ xampp \ htdocs \ tutorial \ index.php в строке 7 – NaMo

+0

Что такое строка 7 в index.php? –

+0

foreach ($ a as $ dom-> find ('. Progress-bar')) – NaMo

Смежные вопросы