javascript - 如何优雅的取消标签包裹?
大家讲道理
大家讲道理 2017-04-10 13:09:43
0
3
492

有一段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中别的标签绑定的有事件的时候,会导致事件无法触发。

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(3)
迷茫
var el = document.querySelector('.markpen-mark');
el.previousSibling.textContent += el.textContent + el.nextSibling.textContent;
el.parentNode.removeChild(el.nextSibling);
el.parentNode.removeChild(el);

特殊情况自己判断。

巴扎黑

是要让 <p> 标签内部的所有元素都变成 textNode 类型的节点吗?
可以参考如下:

document.body.innerHTML='<p>aaa<span>bb</span>ccc</p>';

var p=document.querySelector('p');
[].slice.call(p.childNodes).forEach(function(node){
    if(node.nodeType != 3)
        p.replaceChild(document.createTextNode(node.textContent), node)
});

这样的话,p 内部的元素就变成3个 TextNode 类型的了

小葫芦

我会不告诉你,此时的 $("#aaa").html() 已经是 "一直到一周以前,我对流沙说让风把我吹走吧。" 了吗?


对于 js 来说已经很优雅了,不优雅的大概只有调试界面! →_→

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板