我试图创建一个将类添加到列表中的循环。我希望在除了被点击的元素之外的所有元素上添加这个类。我在互联网上找到了以下内容:
$('.elements').click(function(){
$('.elements').not(this).each(function(){
// do something
});
})
是否有相当于vanilla的javascript?我无法从.not()找到转换。
答案 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属性。
document.getElementById('test').addEventListener('click', function (event) {
if (event.target !== event.currentTarget) {
do something
} else {
don't do something
}
});