2016-11-13 6 views
1

Ich habe einige divs:ein div einer bestimmten Klasse entfernen

<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> 

Ich möchte PHP verwenden, jede div mit der Klasse „Fortschrittsbalken“ im HTML-Code einer Seite erscheinen, zu entfernen. Like:

Wenn ich mit einigen Code file_html.php habe, werde ich bekommen es HTML-Code ist diese Zeile mit:

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

Und nun möchte ich die Fortschrittsbalken divs im Code erscheinen, entfernen. Ist das möglich, wenn ja wie kann ich das Problem lösen? Vielen Dank im Voraus.

+1

Was haben Sie bisher versucht? Was verwenden Sie, um den HTML-Code zu analysieren, oder möchten Sie ihn als String behandeln? –

+0

@Yardpenalty nicht, wenn er diese Server-Seite in PHP tun möchte? –

+0

Richtig deshalb habe ich den Kommentar entfernt. Wenn er immer Dateiinhalte bekommt, könnte er jQuery auf '$ (document) .ready' tho verwenden – yardpenalty

Antwort

2

Ich würde vorschlagen, the DOMDocument class

Seit you cannot remove an element from a list while iterating, dann bauen eine Soll-befreites Array und diejenigen, die nach der Suche fallen.

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

Ich denke OP möchte das ganze div entfernen. – chris85

+0

Ja, ich möchte ganze div entfernen. Entschuldigung, der Titel der Frage war falsch. – NaMo

+0

@ user6803164 hoppla, tut mir leid, ich habe die Frage zu schnell gelesen. Ich habe meine Antwort aktualisiert. –

0

Sie sollten diese mit einem HTML-Parser zu tun:

Mit 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; 

Wenn Sie es mit Schnur (nicht empfohlen) zu tun:

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

du regex mehr machen könnte/weniger restriktiv je nach Anwendungsfall.

+0

Empfangener Fehler: Schwerwiegender Fehler: Kann den Rückgabewert der Methode nicht im Schreibkontext in C: \ xampp \ htdocs \ tutorial \ index.php in Zeile 7 verwenden. – NaMo

+0

Was ist Zeile 7 in index.php? –

+0

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

Verwandte Themen