2016-11-13 130 views
1

的一個div我有一些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來刪除在頁面的HTML代碼類「進度條」出現的任何股利。 像:

如果我有一些代碼file_html.php,我會得到它的使用此行的html代碼:

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

現在我想刪除出現在代碼中的進度條的div。 這是可能的,如果是的話我該如何解決問題? 在此先感謝。

+1

你到目前爲止嘗試過什麼?你用什麼來解析html,或者你希望把它當作一個字符串來對待? –

+0

@yardpenalty沒有,如果他想在php中做這個服務器端? –

+0

正確的,這就是爲什麼我刪除了評論。如果他總是獲取文件內容,他可以在'$(document).ready'上使用jQuery 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

收到的錯誤: 致命錯誤:無法在第7行的C:\ xampp \ htdocs \ tutorial \ index.php的寫入上下文中使用方法返回值 – NaMo

+0

index.php中的第7行是什麼? –

+0

foreach($ a as $ dom-> find('。progress-bar')) – NaMo