el.contains(dom)

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;
          }
        };
      },
    },
  },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值