2015-04-17 72 views
2

我想用我的HTMLCollection剝離出來,它包含,例如元素的標籤,給出的HTML:修改的HTMLCollection返回所有的innerHTML

<p><span>Hello, <i>world!</i></span> Some more text</p> 

我想回

<p>Hello, <i>world!</i> Some more text</p> 

當我在我的html中搜索span標記時返回一個HTMLCollection,這似乎是我獲得所有span標記的最簡單方法,我該如何使用這個集合來完全去除標記並保留所有innerhtml ?

$scope.modifyHtml = function (html) { 
     var el = document.createElement('div'); 
     el.innerHTML = html; 

     var spans = el.getElementsByTagName('span'); 

     //Remove these spans from el but keep their inner! 

     return el.innerHTML; 
    } 
+5

'$('p')。find('span')。contents()。unwrap();'將解包任何跨度內容 –

+0

@ A.Wolff - 聽起來像答案? – adeneo

+0

@adeneo我不知道,這聽起來像OP是使用angularJS,不知道他使用的是jQuery(不是jqLit​​e) –

回答

2

由於標記與jQuery

$scope.modifyHtml = function (html) { 
    var $tmp = $('<div />', { 
     html: html 
    }); 

    //remove span elements  
    $tmp.find('span').contents().unwrap(); 

    return $tmp.html() 
} 

演示:Fiddle


沒有jQuery的

$scope.modifyHtml = function (html) { 
    var el = document.createElement('div'), 
     spans, span, len; 
    el.innerHTML = html; 

    spans = el.getElementsByTagName('span'), span; 

    for (var i = 0; i < spans.length; i++) { 
     span = spans[i]; 
     len = span.childNodes.length; 
     for (var j = 0; j < len; j++) { 
      span.parentNode.insertBefore(span.childNodes[0], span) 
     } 
     span.parentNode.removeChild(span); 
    } 

    return el.innerHTML; 
} 

演示:FiddleFiddle2

+0

嘿,謝謝你的回答,有沒有什麼機會可以告訴我如何限制我的搜索只能跨越特定的背景顏色作爲內聯樣式屬性? – alsco77