2013-05-10 69 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()); 
相关问题