Javascript 替换子/循环问题

标签 javascript for-loop parent-child

我有一个非常奇怪的问题,我有一个 forloop,它应该将所有具有“原始”类的 div 替换为具有"new"类的文本输入。当我运行循环时,它只会用输入替换所有其他 div,但是如果我运行循环只是替换 div 的类而不是将标签更改为输入,它会执行每个 div,而且不仅如此做每一个。

这是我的循环代码,以及实时版本的链接:live version here

function divChange()    {
    var divs = document.getElementsByTagName("div");
    for (var i=0; i<divs.length; i++) {
        if (divs[i].className == 'original') {
            var textInput = document.createElement('input');
            textInput.className = 'new';
            textInput.type = 'text';
            textInput.value = divs[i].innerHTML;
            var parent = divs[i].parentNode;
            parent.replaceChild(textInput, divs[i]);
        }
    }
}

最佳答案

因为当 div 元素之一从 DOM 中删除时 divs 集合会更新,所以您最终会跳过 div,因为您的 i 不会随着集合的重新索引而更新。

一个常见的解决方案是反向迭代。

function divChange()    {
    var divs = document.getElementsByTagName("div");
    for (var i=divs.length - 1; i > -1; i--) {
        if (divs[i].className == 'original') {
            var textInput = document.createElement('input');
            textInput.className = 'new';
            textInput.type = 'text';
            textInput.value = divs[i].innerHTML;
            divs[i].parentNode.replaceChild(textInput, divs[i]);
        }
    }
}

关于Javascript 替换子/循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220520/

相关文章:

javascript - 在 javascript 中创建表单元素

javascript - JS - 使用for循环复制数组属性

python - Python 中的嵌套 WHILE 循环

c# - 子进程和父进程之间共享值

javascript - 可收缩垫工具栏

javascript - 使用 angularJS 获取值输入

javascript - 自动提交表格

arrays - 如何将循环参数解构为固定大小的数组?

java - 'composite' 类应该引用 'parent' 类吗?

css - Wordpress CSS 中的事件子菜单