2016-08-02 27 views
-2

如何在不使用jQuery的情況下從HTML字符串中打開所有圖像?從純HTML中的HTML字符串解包所有圖像

var htmlString = ` 
      <p> random text </p> 
      <a href="src1"><img src="src1"/></a> 
      <a href="src2"><img src="src2"/></a> 
      <a href="src3"><img src="src3"/></a> 
      <p> random text </p> 
      `; 

var div = document.createElement('div'); 
div.innerHTML = htmlString; 

var elements = div.getElementsByTagName("img"); 
let i = 0; 
while (i < images.length) { 
    //unwrap all images from parent in pure javascript 
    images[i] .... 
} 

console.log(div.innerHTML); 

預期輸出:

<p> random text </p> 
<img src="src1"/> 
<img src="src2"/> 
<img src="src3"/> 
<p> random text </p> 
+0

我沒有得到它的圖像。你想刪除所有圖像的直接父標籤? –

+0

@JayGhosh yupp準確 –

+1

不要把它們添加到第一個地方 - 問題解決 –

回答

0

這裏有一個小的代碼,我剛掀起了

[].forEach.call(div.getElementsByTagName("img"), function(img) { 
    var a = img.parentElement; 
    a.parentElement.insertBefore(img, a); 
    a.parentElement.removeChild(a); // can be a.remove() - not sure of cross browser compatibility (shakes fist at IE) 
}); 
+0

它與'a.parentElement.removeChild(a)一起工作;'謝謝 –

+0

a.remove只適用於最近的瀏覽器 –

+1

感謝修復,@AngelPolitis –

0

當然,你剛剛得到的所有鏈接,並在你移動圖像根,然後刪除鏈接。

var parent= document.getElementById('parent'); 
var linkImages = parent.getElementByTagName('a'); 

for(linkImage in linkImages){ 
    while (linkImages[linkImage].childNodes.length > 0) { 
     parent.appendChild(linkImages[linkImage].childNodes[0]); 
    } 
    parent.removeChild(linkImages[linkImage]); 
} 

類似的東西。修改它你爲你的目的服務。

+0

但是,這將檢查所有的鏈接,即使他們不包含圖像 –

+0

jezus修改它。我不能想你所有的問題。添加一些支票 – TreantBG

0
function unwrapImages(htmlString){ 
    var div = document.createElement('div'); 
    div.innerHTML = htmlString; 

    var images = div.getElementsByTagName("img"); 
    var i = 0; 
    while (i < images.length) { 
     var imgParent = images[i].parentElement; 
     var img = images[i]; 
     div.insertBefore(img, imgParent); 
     div.removeChild(imgParent); 
     i++; 
    } 
     return div.innerHTML; 
} 

這個功能應該解開所有從直接父