Я бы сделал это с помощью рекурсивной функции.Смотрите решение ниже:
function updateList () {
var input = document.getElementById('file');
// Create list or array
var list = [];
for (var i = 0, len = input.files.length; i < len; ++i) {
list.push(input.files.item(i));
}
// Output file list
outputList(list);
}
function outputList (list) {
var output = document.getElementById('fileList');
while (output.hasChildNodes()) {
output.removeChild(output.lastChild);
}
var nodes = document.createElement('ul');
for (var i = 0, len = list.length; i < len; ++i) (function(i) {
var node = document.createElement('li');
var filename = document.createTextNode(list[i].name);
var removeLink = document.createElement('a');
removeLink.href = 'javascript:void(0)';
removeLink.innerHTML = 'Remove';
removeLink.onclick = function () {
// Remove item
list.splice(i, 1);
outputList(list);
}
node.appendChild(filename);
node.appendChild(removeLink);
nodes.appendChild(node);
})(i);
output.appendChild(nodes);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="file" name="file" id="file" multiple
onchange="javascript:updateList()" />
<br/>Selected files:
<div id="fileList"></div>