2010-07-07 19 views
16

मेरे पास लोड किए गए HTML मार्कअप के साथ एक DOM ऑब्जेक्ट है।PHP डॉम तत्व को नए तत्व के साथ प्रतिस्थापित करें

<embed allowfullscreen="true" height="200" src="path/to/video/1.flv" width="320"></embed> 

इस तरह एक टैग के साथ:: मैं सभी एम्बेड टैग कि इस तरह दिखना को बदलने के लिए कोशिश कर रहा हूँ

<a 
href="path/to/video/1.flv" 
style="display:block;width:320px;height:200px;" 
id="player"> 
</a> 

मैं इस पता लगाना समस्याएं हो रही हैं और मैं का उपयोग नहीं करना चाहते हैं इसके लिए नियमित अभिव्यक्ति। क्या आप मेरी मदद कर पाएंगे?

संपादित करें:

  // DOM initialized above, not important 
      foreach ($dom->getElementsByTagName('embed') as $e) { 
       $path = $e->getAttribute('src'); 
      $width = $e->getAttribute('width') . 'px'; 
      $height = $e->getAttribute('height') . 'px'; 
      $a = $dom->createElement('a', ''); 
      $a->setAttribute('href', $path); 
      $a->setAttribute('style', "display:block;width:$width;height:$height;"); 
      $a->setAttribute('id', 'player'); 
      $dom->replaceChild($e, $a); // this line doesn't work 
     } 
+0

अभी एक जवाब ऊपर लिखने के लिए समय नहीं है, लेकिन बाहर की जाँच http://www.php.net/manual/en/class.domdocument.php –

+0

मैंने देखा है लेकिन मैं इसे समझ नहीं सकता। मैंने अपने उत्तर को पहले से मौजूद कोड के साथ अपडेट किया है लेकिन तत्वों को स्विच करने वाली अंतिम पंक्ति काम नहीं करती है। –

+0

इसी तरह के प्रश्न देखें: http://stackoverflow.com/q/17864378 –

उत्तर

29

यह एक डोम getElementsByTagName का उपयोग करने से तत्वों को खोजने के लिए आसान है:

यह वही है मैं अब तक है। वास्तव में आप इसके लिए नियमित अभिव्यक्ति के पास नहीं जाना चाहेंगे।

तो डोम आप के बारे में बात कर रहे हैं एक PHP DOMDocument, आप की तरह कुछ करना होता है:

$embeds= $document->getElementsByTagName('embed'); 
foreach ($embeds as $embed) { 
    $src= $embed->getAttribute('src'); 
    $width= $embed->getAttribute('width'); 
    $height= $embed->getAttribute('height'); 

    $link= $document->createElement('a'); 
    $link->setAttribute('class', 'player'); 
    $link->setAttribute('href', $src); 
    $link->setAttribute('style', "display: block; width: {$width}px; height: {$height}px;"); 

    $embed->parentNode->replaceChild($link, $embed); 
} 

संपादित फिर से संपादित करें:

$dom->replaceChild($e, $a); // this line doesn't work 

हाँ, replaceChild नए तत्व को बदलने के लिए ले जाता है पहले तर्क के रूप में और बच्चे को दूसरे के रूप में प्रतिस्थापित किया जाएगा। यह जिस तरह से आप उम्मीद कर सकते हैं वह रास्ता नहीं है, लेकिन यह अन्य सभी डीओएम तरीकों के अनुरूप है। इसके अलावा यह प्रतिस्थापित करने के लिए बच्चे के पैरेंट नोड का एक तरीका है।

(मैं class नहीं id इस्तेमाल किया, जैसा कि आप एक ही पृष्ठ सभी बुलाया id="player" पर कई घटक नहीं हो सकता।)

+0

धन्यवाद, अगली बार मुझे पता चल जाएगा :) –

संबंधित मुद्दे