Javascript 我在一个数组上循环并修改数组的内容,但是我没有得到我期望的结果。

Javascript 我在一个数组上循环并修改数组的内容,但是我没有得到我期望的结果。,javascript,html,css,loops,Javascript,Html,Css,Loops,我在一个数组上循环并修改数组的内容,但是我没有得到我期望的结果。我错过了什么或做错了什么 我有两组div,一组是职业攻击者,另一组是敌人,每组有三个元素。我正试图通过在每一侧周围创建边框来选择一个元素。现在我想将类从攻击者切换到敌人,然后以另一种方式切换。 但当我使用for循环时,它不知何故忽略了一些元素,只更改了一个或两个div类。这是我的密码: HTML: 和我的javascript代码: var attacker = document.getElementsByClassName('att

我在一个数组上循环并修改数组的内容,但是我没有得到我期望的结果。我错过了什么或做错了什么

我有两组div,一组是职业攻击者,另一组是敌人,每组有三个元素。我正试图通过在每一侧周围创建边框来选择一个元素。现在我想将类从攻击者切换到敌人,然后以另一种方式切换。 但当我使用for循环时,它不知何故忽略了一些元素,只更改了一个或两个div类。这是我的密码:

HTML:

和我的javascript代码:

var attacker = document.getElementsByClassName('attacker');
var enemy = document.getElementsByClassName('enemy');


var button = document.getElementById("fight");

// var class1 = document.getElementsByClassName("first")[0].getAttribute("class");
// class1 = class1.split(" ");

//choose attacker
for (var i = 0; i < attacker.length; i++) {
    attacker[i].onclick = function () {
        //select only one attacker and set its id to attackerid
        if (this.getAttribute('class') != 'attacker first') {
            resetAttackerClasses();
            this.setAttribute('class', 'attacker first');
        } else {
            resetAttackerClasses();
        }

    };
}

//choose enemy
for (var i = 0; i < enemy.length; i++) {
    enemy[i].onclick = function () {
        //select only one attacker and set its id to enemyid
        if (this.getAttribute('class') != 'enemy second') {
            resetEnemyClasses();
            this.setAttribute('class', 'enemy second');
        } else {
            resetEnemyClasses();
        }
    };
}

//fight
button.onclick = function() {
    //take off enemy health
    document.getElementsByClassName('enemy second')[0].children[1].style.width = '50px';

    resetAttackerClasses();
    resetEnemyClasses();

     for (var i = 0; i < attacker.length; i++) {
            attacker[i].setAttribute('class', 'enemy');
            enemy[i].setAttribute('class', 'attacker');
    };
};


function resetAttackerClasses() {
    for (var i = 0; i < attacker.length; i++) {
        attacker[i].setAttribute('class', 'attacker');
    };
}
function resetEnemyClasses() {
    for (var i = 0; i < attacker.length; i++) {
        enemy[i].setAttribute('class', 'enemy');
    };
}

这是因为您正在删除用于获取元素的类,这意味着该元素将自动从活动节点列表中删除,因为它不再与查询匹配

当这种情况发生时,NodeList将被重新索引,因此下一个元素将成为当前元素,并且您将使用下一个i++跳过它

要修复它,请相反地进行迭代


如果不想反向执行,则每次从列表中删除元素时,都要减小索引。

您也应该能够复制它,然后在新数组上迭代:var noderar=array.prototype.slice.calltheNodeList,0@是的,那也行。不过很高兴避免复制。如果OP关心顺序,我宁愿减少索引。
var attacker = document.getElementsByClassName('attacker');
var enemy = document.getElementsByClassName('enemy');


var button = document.getElementById("fight");

// var class1 = document.getElementsByClassName("first")[0].getAttribute("class");
// class1 = class1.split(" ");

//choose attacker
for (var i = 0; i < attacker.length; i++) {
    attacker[i].onclick = function () {
        //select only one attacker and set its id to attackerid
        if (this.getAttribute('class') != 'attacker first') {
            resetAttackerClasses();
            this.setAttribute('class', 'attacker first');
        } else {
            resetAttackerClasses();
        }

    };
}

//choose enemy
for (var i = 0; i < enemy.length; i++) {
    enemy[i].onclick = function () {
        //select only one attacker and set its id to enemyid
        if (this.getAttribute('class') != 'enemy second') {
            resetEnemyClasses();
            this.setAttribute('class', 'enemy second');
        } else {
            resetEnemyClasses();
        }
    };
}

//fight
button.onclick = function() {
    //take off enemy health
    document.getElementsByClassName('enemy second')[0].children[1].style.width = '50px';

    resetAttackerClasses();
    resetEnemyClasses();

     for (var i = 0; i < attacker.length; i++) {
            attacker[i].setAttribute('class', 'enemy');
            enemy[i].setAttribute('class', 'attacker');
    };
};


function resetAttackerClasses() {
    for (var i = 0; i < attacker.length; i++) {
        attacker[i].setAttribute('class', 'attacker');
    };
}
function resetEnemyClasses() {
    for (var i = 0; i < attacker.length; i++) {
        enemy[i].setAttribute('class', 'enemy');
    };
}