Web Component-自定义元素的生命周期

在之前大概了解了 Web Component,知道是怎么玩的,不过在查阅资料后发现之前有些错误

Node.cloneNode 的局限性

在之前,使用的是template.content.cloneNode(true);来创建出一个新的节点,这种方法有一些局限性:会复制原节点的所有属性及属性值,其中就包括id,这样页面中就有多个id一样的元素了

拷贝它所有的属性以及属性值,当然也就包括了属性上绑定的事件(比如 οnclick=“alert(1)”),但不会拷贝那些使用 addEventListener()方法或者 node.onclick = fn 这种用 JavaScript 动态绑定的事件. --mdn

MDN 同样也给出警告

注意:为了防止一个文档中出现两个 ID 重复的元素,使用 cloneNode()方法克隆的节点在需要时应该指定另外一个与原 ID 值不同的 ID

而且,生成的节点的ownerDocument仍然指向源节点的ownerDocument

既然这个方法有一定的局限性,那么有没有更好的方法呢?有的!

document.importNode

document.importNode将外部文档的一个节点拷贝一份,然后可以把这个拷贝的节点插入到当前文档中

使用方式

// deep参数表示是否递归复制源节点的所有子节点
const node = document.importNode(externalNode, deep); 

注意:

新生成节点的 parentNodenull,因为它还没有插入当前文档的文档树中,属于游离状态,因此无法对其进行操作

这样的话我们就可以很方便的修

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值