如何在不打扰内容的情况下更换标签?

时间:2013-05-10 09:41:56

标签: javascript jquery

我只想删除一个html标记(打开和关闭)而不会打扰内容。

例如,给定此标记......

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

我想谈谈......

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

请帮我解决这个问题。

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

只要myspan1范围内没有其他内容:

,这应该可行
$("#myspan1").html($("#myspan2").html());

它会将myspan1范围的内容替换为myspan2的内容,从而有效删除标记。对于给定的示例,它可以工作,但如果除myspan1之外的myspan2内有其他内容,则会失败。

答案 2 :(得分:1)

尝试以下代码

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

答案 3 :(得分:0)

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

答案 4 :(得分: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)

答案 5 :(得分:0)

如果您要将直接子元素的内容分配给父元素,则可以使用此

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