2012-12-19 59 views
3

我有一個帶有「alt」屬性的HTML <img>。我的<img>包裹在<a>中。 <a>有一個「標題」屬性。例如:讀取一個HTML標記的屬性並將其寫入另一個HTML標記的屬性

<a title="" href ="page.html"><img src="image.jpg" alt="text"></a> 

我需要讀取<img>的「alt」屬性的值,並將其寫入<a>的「標題」屬性值。有沒有辦法在PHP中做到這一點?

+2

是的,有一種方法,例如DOM。你有什麼嘗試? –

+0

如果您通過PHP呈現整個事物,爲什麼不能爲兩個標記呈現alt屬性? – techfoobar

+3

如果您爲此使用jquery/javascript,它會更容易/更快。如果您使用PHP,那麼最好還是讓每個html元素的id選擇正確的標題。 –

回答

2

您可以通過PHP

$url="http://example.com"; 

$html = file_get_contents($url); 

$doc = new DOMDocument(); 
@$doc->loadHTML($html); 

$tags = $doc->getElementsByTagName('img'); 

foreach ($tags as $tag) { 
     echo $tag->getAttribute('alt'); 
} 
+0

好的,謝謝,這讓我獲得給定圖像的'alt'屬性值。接下來,我需要將該值寫入其周圍錨標記的「標題」屬性。任何想法? –

+0

感謝您使用此NullPointer將我踢開! Martinqt設法完成解決方案。乾杯!! –

0

你可以使用jQuery嘗試做到這一點,

<script> 
    var altValue = $('img').attr('alt'); 
    $('a').attr('title', altValue); 
</script> 

你當你需要上的onClick利用這一點,如果你有更多的IMG和一個標籤如下

<script> 
    function changeTitle(this) { 
     var altValue = $(this).find('img').attr('alt'); 
     $(this).find('a').attr('title', altValue); 
    } 
</script> 
+0

感謝Vinoth,雖然你的解決方案將有助於在網頁上。在我的情況下,我正在後端進行一些字符串處理。不管怎麼說,還是要謝謝你!!! –

0

PHP是一種服務器端語言。所以一旦渲染輸出,你就不能再改變它了。 (除非你下載使用PHP,然後輸出改變的數據內容,但似乎只有有用的,如果你不能訪問一部開拓創新的源)如果你正在創建PHP中的輸出,你可以使用:

$alt = 'text'; 
echo '<a title="'.$alt.'" href ="page.html"><img src="image.jpg" alt="'.$alt.'"></a>'; 

如果你已經有輸出,你可以使用jQuery(http://jquery.com/

<script type='text/javascript'> 
//perform after page is done 
$(function() { 

    //each image in an a tag 
    $('a img').each(function() { 
    var $el = $(this); 
    var alt = $el.attr('alt'); 
    $el.parent('a').attr('title', alt); 
    }); 
}); 
</script> 

更新

如果它的純PHP字符串修改,你也可以使用正則表達式來改變它,而不是DOM操作:

$string = '<a title="" href ="page.html"><img src="image.jpg" alt="text"></a>'; 
$pattern = '/<a(.*?)title="(.*?)"(.*?)<img(.*?)alt="(.*?)"(.*?)<\/a>/i'; 
$replacement = '<a${1}title="$5"${3}<img${4}alt="${5}"${6}</a>'; 
echo preg_replace($pattern, $replacement, $string); 
+0

感謝Hugo,這是一個非常簡潔的解決方案!雖然這將有助於在網頁上。在我的情況下,我正在後端進行一些字符串處理。 –

+0

好的,用一些preg_replace更新,即使你已經有了awnser。 –

0

雖然這個問題被標記,我想我會提供了一個簡單,樸素的JavaScript,意味着做同樣的事情的客戶端的:

function attributeToParent(tag, from, to, within) { 
    if (!tag || !from || !to) { 
     return false; 
    } 
    else { 
     within = within && within.nodeType == 1 ? within : document; 
     var all = within.getElementsByTagName(tag); 
     for (var i = 0, len = all.length; i < len; i++) { 
      if (all[i].getAttribute(from) && all[i].parentNode.tagName.toLowerCase() !== 'body') { 
       all[i].parentNode.setAttribute(to, all[i].getAttribute(from)); 
      } 
     } 
    } 
} 

attributeToParent('img', 'alt', 'title');​ 

JS Fiddle demo

這可能會被整理一些,但我認爲它是相對清晰的,儘管它比我想要的要複雜一些。

參考文獻:

+0

謝謝David!儘管如此,我仍然需要將它作爲後端進程的一部分。我正在處理來自Fireworks的一部分HTML「導出爲HTML」。我需要通過腳本來運行該HTML來整理它。歡呼爲Javascript解決方案。 –

+0

不客氣!我認爲它很可能是服務器端的東西,但我看到(有點不必要的)jQuery的答案,並希望提供一個普通的JavaScript替代方案。 –

1

由於開始由空指針,

$url="http://example.com"; 

    $html = file_get_contents($url); 

    $doc = new DOMDocument(); 
    @$doc->loadHTML($html); 

    $tags = $doc->getElementsByTagName('img'); 

    foreach ($tags as $tag) { 
    $parent = $tag->parentNode; 
    if($parent->nodeName == 'a') { 
     $parent->setAttribute('tittle', $tag->getAttribute('alt')); 
    } 
    } 

希望它可以幫助

+1

優秀martinqt!非常感謝,這非常有幫助! –

+0

不客氣。 – martinqt