javascript-将类移除到拥有它的元素

javascript-将类移除到拥有它的元素,javascript,class,removeclass,Javascript,Class,Removeclass,我正在寻找此jquery代码的纯javascript替代品: $().evt(function(){ $('.class').removeClass('active'); $(this).addClass('active'); }) 这就是我努力的方式 node.addEventListener('contextmenu', function(e){ e.preventDefault(); var currentActive =

我正在寻找此jquery代码的纯javascript替代品:

$().evt(function(){
    $('.class').removeClass('active');
    $(this).addClass('active');
})
这就是我努力的方式

 node.addEventListener('contextmenu', function(e){
            e.preventDefault();
            var currentActive = document.querySelectorAll('.active');
            alert(currentActive.length);
            currentActive.className = '';
            this.className = 'active';
        });
小提琴:


但是当前活动类未被删除

您需要以
文档的形式访问正确的节点。querySelectorAll
返回一个
节点列表

试试这个

    node.addEventListener('contextmenu', function(e){
        e.preventDefault();
        var currentActive = document.querySelectorAll('.active');
        if(currentActive[0]) { // first item with class 'active'
            currentActive[0].className = '';
        }
        this.className = 'active';
    });

更新的fiddle:

尝试从特定元素列表中删除任何类:

var removeClassName = 'active';
var classes = element.className.match(/\S+/g);
var ind = classes.indexOf(removeClassName);
if (ind >= 0)
    classes.splice(index, 1);
element.className = classes.join(' ');
试试这个:

node.addEventListener('contextmenu', function(e){
            e.preventDefault();
            var currentActive = document.querySelectorAll('.active');
            for (var i = 0; i < currentActive.length; i++) {
                 currentActive[i].classList.remove('active');
            }
            this.className += ' active';
        });
node.addEventListener('contextmenu',函数(e){
e、 预防默认值();
var currentActive=document.querySelectorAll('.active');
对于(var i=0;i
这将仅从这些节点中删除活动的类。

尝试以下操作:

var node = mainNodes[i]; 
node.addEventListener('contextmenu', function(e){
    e.preventDefault();
    var currentActive = document.querySelectorAll('.active');

    for (element in currentActive) {
        element.className = element.className.replace(' active', '');
    }

    e.target.className += ' active';
在事件处理程序的上下文中,这将链接到匿名函数。改用e.target

此代码将删除所有元素上的.active类,并将该类添加到事件目标。其他答案只适用于本课程的第一个元素,这是你想要的吗


更新的fiddle:

你所说的
$().evt(function(){})是什么意思?
.evt()
替换哪个事件处理程序?您的意思是
.contextmenu()
?如果只修改第一项,为什么要使用
querySelectorAll
。只要
querySelector
就行了。@tonimichelcaubit:您应该始终接受通过单击绿色勾号解决问题的答案。谢谢