我只是想在不干扰内容的情况下删除一个 html 标签(打开和关闭)。
例如,给定这个标记......
var temp =
<span id="myspan1">
<span id="myspan2" class="new">
hello world !</span>
</span>
我想达到这个...
var newcontent =
<span id="mySpan1">
hello world !
</span>
请帮我在 jquery 中解决这个问题。
我只是想在不干扰内容的情况下删除一个 html 标签(打开和关闭)。
例如,给定这个标记......
var temp =
<span id="myspan1">
<span id="myspan2" class="new">
hello world !</span>
</span>
我想达到这个...
var newcontent =
<span id="mySpan1">
hello world !
</span>
请帮我在 jquery 中解决这个问题。
我认为 jQuery 有一个unwrap
. 由于unwrap
删除了父级,我们需要获取 的内容#myspan2
以使#myspan2
父级被删除,最终#myspan1
成为父级。
$('#myspan2').contents().unwrap();
为了进一步阐明为什么unwrap
比做更好的html
是,当您这样做时.html()
,它仅检索从当前元素下降的 DOM 的字符串表示形式。它不会获取这些后代附带的处理程序和数据。因此,如果您使用该 HTML 字符串重新创建 DOM,它会正确地重新创建 DOM,但不再具有附加到这些后代的处理程序和数据。
只要myspan1
跨度中没有其他内容,这应该可以工作:
$("#myspan1").html($("#myspan2").html());
它将myspan1
span 的内容替换为 的内容myspan2
,从而有效地删除了标签。对于给出的示例,它可以工作,但如果您在里面有其他内容,它会myspan1
失败myspan2
。
试试下面的代码
$('#myspan1').html($('#myspan2').html())
尝试
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)
如果您希望将直接子元素的内容分配给父元素,您可以使用它
$("#myspan2").parent().html($("#myspan2").html());
$('#myspan1').html($('#myspan2').html());