el.contains(dom)

本文探讨了在Vue应用中使用`Node.contains()`方法时遇到的问题,当在循环内绑定事件监听器时,由于事件冒泡和覆盖,导致只有最后一个组件的判断正确。解决方案是避免在document上绑定事件,而是在每个组件的父级上监听,但这可能引发新的问题——点击空白区域无法正确关闭。文章揭示了DOM操作和事件处理在前端框架中的复杂性,并提出了应对策略。
摘要由CSDN通过智能技术生成

Node.contains()返回的是一个 布尔值 ,来表示传入的节点是否为该节点的后代节点。
node.contains( otherNode )

  1. node 是否包含otherNode节点.
  2. otherNode 是否是node的后代节点.

如果 otherNode 是 node 的后代节点或是 node 节点本身.则返回true , 否则返回 false.

但是有个坑

在vue中自定义组件中 如果你循环了这个组件 然后 就只有最后一个才是正确的(因为documnet.onclick一直在被覆盖所以到最后只有最后一个才是对的,要解决这个问题既不要用document的上面的事件,直接用每一个的组件的父级,但是这样又会触发点击空白的地方不消失,) (也就是包含关系就会返回true)

 directives: {
    "click-panel": {
      bind(el, binding, vnode) {
        const vm = vnode.context;
        console.log(el);
        document.onclick = function (e) {
          const dom = e.target;
          const isElSon = el.contains(dom);
          console.log(el);
          console.log(dom);
          console.log(isElSon);  //只有最后一个组件的 正确操作才是true
          if (isElSon) {
          } else {
            vm.showPanel = false;
          }
        };
      },
    },
  },
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值