我只想删除一个html标记(打开和关闭)而不会打扰内容。
例如,给定此标记......
var temp =
<span id="myspan1">
<span id="myspan2" class="new">
hello world !</span>
</span>
我想谈谈......
var newcontent =
<span id="mySpan1">
hello world !
</span>
请帮我解决这个问题。
答案 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());