2011-08-18 150 views
2

比方說,我有HTML文檔的這一部分:替換字符串中包含一些HTML的HTML元素

<div>hello world <span id="test"></span></div> 

在直接的JavaScript,我需要包含在像繩子一些HTML內容,以取代span'<span>other</span> yo <a href="www.google.ca">google</a>'

所以最終的結果是這樣的:

<div>hello world <span>other</span> yo <a href="www.google.ca">google</a></div> 

我FACI的問題ng是HTML字符串可以在其「根」處包含任意數量的標籤。所以它不是一對一替換標籤。

我需要在直接的JavaScript(沒有jQuery)中做到這一點。

如果有人可以幫忙!

感謝

回答

2

後有什麼是你不能只是設置的<span id="test">的innerHTML的原因是什麼?有額外的跨度沒有害處...

如果你真的需要刪除外部跨度,你可以插入所有的childNodes之前。

var html = '<span>other</span> yo <a href="www.google.ca">google</a>'; 

var removeMe = document.getElementById('test'); 
removeMe.innerHTML = html; 

var child; 
while(child = removeMe.childNodes[0]) { 
    removeMe.parentNode.insertBefore(child, removeMe); 
} 

removeMe.parentNode.removeChild(removeMe); 

http://jsfiddle.net/4tLVC/1/

+0

我實際上使用你的技術,而不是在「removeMe」內工作,我創建了一個獨立的'div'元素並將內容插入它,它可能會快一點,因爲dom對象沒有附加到主文檔中。但是非常感謝你解決了我的問題:) –

+0

我終於使用了這段代碼:看起來我正在丟失'喲'文本節點與你的... http://jsfiddle.net/4zMha/但再次感謝! –

+0

呵呵,問題是我增加了,但是從列表中刪除了這個節點,所以它被跳過了,修正了代碼和jsfiddle –

0

不能使用

var span = document.getElement...('test') 
div.getElementById('yourDiv').removeChild(span) 

或實際上,你可以做

span.parentNode.removeChild(span) 

這應該工作。 是

div.innerHTML += 'your cool <span>content></span>' 
+0

如果有跨度 –

+0

後的任何文本,但不值得一降投票這是行不通的,不是我! –

+0

顯然有人不喜歡我;-) – mkk