Javascript创建了太多的输入元素

时间:2012-01-03 18:28:29

标签: javascript dom

无法弄明白这一点。在Firefox中,(仅在Firefox中测试过),此代码创建了8个输入和8个按钮。我认为它应该只创建一个。需要一些帮助。

var replacefiles = function(){
    var inputs = document.getElementsByTagName('input');
    var length = inputs.length // prevent infinite loop
    for (var x = 0; x < length; x++){
        var type = inputs[x].getAttribute('type');
        if (type === 'file'){
            var file = inputs[x];
            var parent = file.parentNode;
            var input = document.createElement('input');
            var button = document.createElement('button');
            parent.insertBefore(input, file);
            parent.insertBefore(button, file);
        }
    }
}

1 个答案:

答案 0 :(得分:3)

getElementsByTagName会返回结果的实时视图。

当您在当前版本之前插入新的<input>时,当前的内容会转移,因此inputs[i + 1]现在指向相同的<input type="file">

您需要通过编写

将结果复制到普通数组中
inputs = Array.prototype.slice.call(inputs);