如何优雅的取消标签包裹?


有一段HTML如下


 <p>
    一直到一周以前,
    <span class="markpen-mark">我对流沙说</span>
    ,让风把我吹走吧。
</p>

我这样删除后


 $('.markpen-mark').contents().unwrap();

会变成这样
删除后的效果

如何删除它后,将它变成这样,标签 p 中的 childNodes 变成了 3 个 #text
请输入图片描述
在线示例 http://codepen.io/linkgod/pen/HrmAj ,

我也尝试这种方法


 var parent = $('.markpen-mark').parent();
$('.markpen-mark').contents().unwrap();
parent.html(parent.html());

但是这样做的坏处就是,当parent中别的标签绑定的有事件的时候,会导致事件无法触发。

请问还有没有优雅的解法呀?

jquery 前端 HTML JavaScript

weeyarn 11 years, 4 months ago

 var el = document.querySelector('.markpen-mark');
el.previousSibling.textContent += el.textContent + el.nextSibling.textContent;
el.parentNode.removeChild(el.nextSibling);
el.parentNode.removeChild(el);

特殊情况自己判断。

bluecpu answered 11 years, 4 months ago

Your Answer