2011-10-15 70 views
0

我想在網站上做一些動態CSS樣式更新,並且需要使用PHP over JavaScript。我只需要標記其中包含img標記的div標記,並忽略div標記的其餘部分。PHP DOM檢查img是否在div內

這是我到目前爲止有:

 

    $dom = new domDocument; 
    $dom->loadHTML($test); 
    $dom->preserveWhiteSpace = false; 

    $divs = $dom->getElementsByTagName('div'); 
    foreach ($divs as $div) { 
     $saveXML[] = $dom->saveXML($div); 
     $childNotes[] = $div->getChildNodes; 
    } 

我只是想在這裏兩種方法。 $saveXML選項的問題在於它給我提供了包含封裝div的全部代碼。我不想那樣。此外,從現在開始,我將不得不在代碼上運行正則表達式或其他代碼,以查找它是否在其中包含img標記。

$childNodes選項應該是我認爲最好的,但數組返回空。這本來是不錯的,因爲我可以簡單地試圖像

 

    if ($childNode->nodeType == 'img'){ 
     $div->setAttribute('class', $new_attributes); 
    } 

東西(我沒有想到,最後一位了充分但那是一般概念)..

下面是HTML代碼我的一個樣本需要通過

 

    div class="image-left drop-shadow raised" style="width: 210px"> 
     img src="images/myimage.jpg" width="200" height="150" class="size-full"/
     p>EDIT THIS DIV's STYLE /p> 
    /div> 
    div class="blocktext" style="width: 150px;"> 
     p>DONT EDIT THIS DIVs STYLE /p> 
    /div> 

任何幫助,請搜索...

回答

0

我希望你的樣品未啓用HTML的實際HTML UR使用。許多ur標籤沒有完成打開/關閉「<」的。

但是,如果它不是,那麼你可以使用:

$childNode->getElementsByTagName('img'); 

如果在它的圖像或沒有這將返回,從閱讀http://php.net/manual/en/domdocument.getelementsbytagname.php我得到這樣它會返回一個列表...我可以是錯的,但是在那裏拋出想法。

+0

完全!我幾乎無法理解HTML。 –

+0

啊愚蠢的文本編輯器一直在想,代碼的一點是頁面上的實際代碼,它會消失...所以我只是刪除它們的具體情況。我知道他們應該有<的:) –

0

你通常做的是與Xpath query

$xp = new DOMXPath($dom) 
$divsContainingImg = $xp->query('//div/img/..'); 
foreach ($divsContainingImg as $div) 
{ 
    /* @var $div DOMElement */ 
    ... 
} 

這將選擇所有img元素是一個div元素的直接孩子,然後它的父(在div元素)。