javascript - 如何使用纯 Javascript(不使用 Jquery)使用类选择器检测元素外部的点击

标签 javascript

I want to detect clicking outside an element using class name as selector

<div id="popOne" class="pop">...</div>
<div id="popTwo" class="pop">...</div>
...
<div id="popLast" class="pop">...</div>


<script>
    var popElement = document.getElementById("pop");
    document.addEventListener('click', function(event) {
        var isClickInside = popElement.contains(event.target);
        if (!isClickInside) {
            alert("Outside");
            //the click was outside the popElement, do something
        }
    });
</script>

最佳答案

作为为每个点击事件迭代所有可能的 .pop 元素的替代方法,只需遍历 DOM 以查看节点或其任何祖先是否具有所需的类:

document.addEventListener('click', function(e) {
    var node = e.target;
    var inside = false;
    while (node) {
        if (node.classList.contains('pop')) {
            inside = true;
            break;
        }
        node = node.parentElement;
    }

   if (!inside) {
       alert('outside');
       // click was outside
   } else {
       alert('inside');
    }
});

这将使性能与 DOM 树的深度相关,而不是 .pop 元素的数量。

关于javascript - 如何使用纯 Javascript(不使用 Jquery)使用类选择器检测元素外部的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696025/

相关文章:

php - 为什么我的 textarea 文本没有按预期显示/隐藏?

javascript - 从索引数组中重新排序 immutable.js 列表

javascript - 如何使用jquery删除json字符串中的空值

javascript - 使用Browserify导入平滑滚动

javascript - 每 x 秒递增一次进度条

javascript - 自动调整文本区域大小删除退格键上的行

javascript - 带有 onclick 事件的 Knockout.js 可观察数组

javascript - Coderbyte 数组相加解决方案——for循环与for循环

javascript - 如何使用两个预定义值绑定(bind) HTML 中的选择选项以在 mongodb 中插入数据

javascript - 如何避免 JS 代码上的 chrome 自动播放策略?