2011-06-12 58 views
2

例如,在我的HTML中,我有「img」標籤。 我想將它們打包成「a」標籤獲取父節點的HTML,包括childs html並將其打印出來

如果我這樣做了一次,一切都很好。但下一次,已經打包的標籤再次打包並且很糟糕。我想要了解的是已經包含在「a」中的「img」。

爲了這個,我可以使用以下...

$doc = new DOMDocument(); 
$doc->loadHTML($article_header); 

$imgs = $doc->getElementsByTagName('img'); 
foreach ($imgs as $img) { 

????? 

} 

所以我會得到這個 「IMG」 標籤。現在如何獲得「img」的父節點並檢查它是否爲「a」?

+1

也許會得到'a'並看看它是否包含圖像 – Ibu 2011-06-12 08:56:21

+0

這個東西必須在文章編輯器中工作,並且我有必須用「a」標籤覆蓋的圖像。所以我必須先檢查「img」標籤。 – David 2011-06-12 09:00:47

+0

請恢復您的編輯到這個問題,否則您的[其他問題](http://stackoverflow.com/questions/6321262/how-to-pass-data-from-domdocument-to-regexp)可能會被關閉爲這一個的重複。你的問題,因爲它是在你的編輯收到良好的答案,所以改變它不是一個好主意/建議。 – Mat 2011-06-12 10:32:18

回答

1

?????是:

if ($img->parentNode->tagName == "a") { ... } 
+0

謝謝..會嘗試....將在幾分鐘後發佈答案... – David 2011-06-12 09:02:32

+0

現在另一個問題,你的代碼工作,我使用它如下> if($ img-> parentNode-> tagName!=「a」 ){ 但是如何給preg_match_all這個對象?我的意思是,如果我給直接$ img它不能使用它,即使回聲$ img不給 – David 2011-06-12 09:11:18

+0

我已經更新了我的代碼在第一封郵件,請現在檢查 – David 2011-06-12 09:21:32

1

你可以嘗試一些像這樣的代碼在你foreach循環體...

if ($img->parentNode->tagName == 'a') { 
    continue; 
} 

確保它的第一件事,顯然:)

+0

我已經在第一條消息中更新了我的代碼,請現在檢查 – David 2011-06-12 09:19:29

0

下可能工作

foreach ($imgs as $img) { 

    if(!$img.packed) { 
     .... //packing code 
     $img.packed = true; 
    } 

} 
+0

OP詢問如何確定'img'標籤的父節點是否爲'a'標籤。爲了您的答案與問題相關,您需要提供確定'$ img.packed'的值所需的代碼[原文如此; PHP語法使用' - >',而不是'''間接]。 – 2011-06-13 01:07:56

+0

@Phoenix:沒有注意到它是PHP,我認爲它是在javascript下標記的,然後我就這麼做了。太糟糕了,我沒有注意到語法。 – 2011-06-13 05:29:57