无法弄明白这一点。在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);
}
}
}
答案 0 :(得分:3)
getElementsByTagName
会返回结果的实时视图。
当您在当前版本之前插入新的<input>
时,当前的内容会转移,因此inputs[i + 1]
现在指向相同的<input type="file">
。
您需要通过编写
将结果复制到普通数组中inputs = Array.prototype.slice.call(inputs);