jQuery的.not()的香草javascript等效项是什么?

Dan*_*ero 3 javascript jquery

我正在尝试创建一个将类添加到列表的循环。我希望将此类添加到除单击元素之外的所有元素上。我在互联网上找到了以下内容:

$('.elements').click(function(){
     $('.elements').not(this).each(function(){
         // do something
     });
})
Run Code Online (Sandbox Code Playgroud)

有相当于香草的JavaScript吗?我找不到来自.not()的转换。

Jam*_*ice 5

最接近的等价物可能是Array.prototype.filter它允许您使用函数测试数组的每个元素:

var elementToExclude = something;
arrayOfElements.filter(function (elem) {
    return elem !== elementToExclude;
}).forEach(doSomething);
Run Code Online (Sandbox Code Playgroud)

  • 这里完全吹毛求疵,但值得指出的是,这不适用于 NodeList(需要使用 `[].filter.call(arrayOfElements, function(elem){})`)。我知道你说的是 `arrayOfElements`,只是觉得值得指出其他人阅读它 (2认同)

imc*_*mcg 5

您发布的完整代码的原始版本将是这样的。相当详细的TBH,而无需帮助程序向每个el添加点击侦听器。

var els = document.querySelectorAll('.elements');
[].forEach.call(els, function(el, i, els) {
    el.addEventListener('click', function() {
        [].forEach.call(els, function(el) {
            if(el !== this) {
                // do something
            }
        }, this);
    });
});
Run Code Online (Sandbox Code Playgroud)