使用普通Javascript选择除className之外的所有元素

时间:2018-03-06 08:31:55

标签: javascript html

我正在实施一个简单的网站,其中有一个切换边栏。当我点击页面上的某个地方(侧边栏除外)时,我想隐藏侧边栏。所以我认为我应该获取页面上的所有元素,除了具有侧栏类的元素。用普通的javascript有没有办法做到这一点? JQuery有:not()为此选择,但我试图不使用JQuery ...... :(

1 个答案:

答案 0 :(得分:0)

  

JQuery有:not()选择此

它实际上是CSS,虽然jQuery扩展它以允许所有选择器(CSS的:not仅允许:not内的simple selector。你的是一个简单的选择器,所以你可以使用:not

var list = document.querySelectorAll(":not(.sidebar)");

<强>然而

  

当我点击页面上的某个地方(侧边栏除外)时,我想隐藏侧边栏。

我不会通过在每个元素上设置事件处理程序来实现它。相反,我会在document上设置一个处理程序,然后检查事件是否在通往文档的途中通过侧栏传递,例如:

document.addEventListener("click", function(e) {
    if (e.target.closest(".sidebar")) {
        return; // The click passed through the sidebar
    }
    // close the sidebar
});

使用Element#closest,它出现在所有现代浏览器中,并且可以为过时的浏览器进行填充。