2013-05-10 94 views
1

我只是想在不干擾內容的情況下刪除html標籤(包括開啓和關閉)。如何在不干擾內容的情況下更換標籤?

例如,假設此標記...

var temp = 
<span id="myspan1"> 
<span id="myspan2" class="new"> 
hello world !</span> 
</span> 

我想這...

var newcontent = 
<span id="mySpan1"> 
    hello world ! 
</span> 

請幫我在jQuery的這個解決。

+0

獲取'#myspan2'的innerHTML並將其分配給'#myspan1'? – nhahtdh 2013-05-10 09:43:49

+0

你真的想把'myspan1'的'id'改成'mySpan1'嗎? – 2013-05-10 09:46:48

回答

1

這應該工作,只要你在myspan1內無其他內容:

$("#myspan1").html($("#myspan2").html()); 

它代替了myspan1跨度與myspan2內容的內容,有效去除標籤。舉例說明它的工作原理,但如果除之外還有其他內容myspan1,則會失敗。

+2

我建議避免通過標記進行此操作,尤其是因爲事件處理程序會丟失。 – 2013-05-10 09:47:38

0
$('#myspan1').html($('#myspan2').html()); 
7

我認爲jQuery的得到了unwrap。由於unwrap刪除父項,我們需要獲取#myspan2的內容以使#myspan2父項被移除,ending up with #myspan1 being the parent

$('#myspan2').contents().unwrap(); 

爲了進一步澄清爲什麼unwrap比做html更好的是,當你做.html(),它僅僅獲取DOM從當前元素遞減的字符串表示。它不會獲取這些後代隨附的處理程序和數據。因此,如果使用該HTML字符串重新創建DOM,它會正確地重新創建DOM,但附加到這些後代的does not anymore have the handlers and data

+0

'unwrap'和下面的其他答案有什麼不同?使用unwrap的任何優勢? – GoodSp33d 2013-05-10 11:20:56

+0

@ 2-Stroker''html'方法返回一個字符串,並且你失去了綁定到你檢索的html的事件和數據。使用該字符串重建DOM將返回結構,但不返回數據或處理程序。 [看到這個小提琴](http://jsfiddle.net/hXne5/1/)。這就是爲什麼'unwrap'更好,因爲它只是在元素周圍移動。 – Joseph 2013-05-10 11:33:42

+0

好的,謝謝澄清:) – GoodSp33d 2013-05-10 11:39:38

1

試試下面的代碼

$('#myspan1').html($('#myspan2').html()) 
0

嘗試

var temp = '<span id="myspan1"><span id="myspan2" class="new">hello world !</span></span>'; 

var $t = $(temp); 
$t.find('.new').contents().unwrap(); 
console.log($t[0].outerHTML) 
0

,如果你正在尋找一個直接子元素的父元素的內容分配,您可以使用此

$("#myspan2").parent().html($("#myspan2").html()); 
相關問題