哪个是jilla的.not()的等效的vanilla javascript?

时间:2014-09-24 09:03:59

标签: javascript jquery

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

$('.elements').click(function(){
     $('.elements').not(this).each(function(){
         // do something
     });
})

是否有相当于vanilla的javascript?我无法从.not()找到转换。

3 个答案:

答案 0 :(得分:4)

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

var elementToExclude = something;
arrayOfElements.filter(function (elem) {
    return elem !== elementToExclude;
}).forEach(doSomething);

答案 1 :(得分:4)

您发布的完整代码的vanilla版本将是这样的。相当详细的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);
    });
});

答案 2 :(得分:1)

您应该分析click event。观察目标和currentTarget属性。

jsfiddle

document.getElementById('test').addEventListener('click', function (event) {
    if (event.target !== event.currentTarget) {
        do something
    } else {
        don't do something
    }
});