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 中解决这个问题。

4

6 回答 6

7

我认为 jQuery 有一个unwrap. 由于unwrap删除了父级,我们需要获取 的内容#myspan2以使#myspan2父级被删除,最终#myspan1成为父级。

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

为了进一步阐明为什么unwrap比做更好的html是,当您这样做时.html(),它仅检索从当前元素下降的 DOM 的字符串表示形式。它不会获取这些后代附带的处理程序和数据。因此,如果您使用该 HTML 字符串重新创建 DOM,它会正确地重新创建 DOM,但不再具有附加到这些后代的处理程序和数据。

于 2013-05-10T09:44:45.147 回答
1

只要myspan1跨度中没有其他内容,这应该可以工作:

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

它将myspan1span 的内容替换为 的内容myspan2,从而有效地删除了标签。对于给出的示例,它可以工作,但如果您在里面有其他内容,它会myspan1失败myspan2

于 2013-05-10T09:43:42.010 回答
1

试试下面的代码

$('#myspan1').html($('#myspan2').html())
于 2013-05-10T09:45:41.963 回答
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)
于 2013-05-10T09:46:52.427 回答
0

如果您希望将直接子元素的内容分配给父元素,您可以使用它

$("#myspan2").parent().html($("#myspan2").html());
于 2013-05-10T09:54:02.043 回答
0
$('#myspan1').html($('#myspan2').html());
于 2013-05-10T09:44:44.943 回答