Node.contains()返回的是一个 布尔值 ,来表示传入的节点是否为该节点的后代节点。
node.contains( otherNode )
- node 是否包含otherNode节点.
- 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;
}
};
},
},
},