2013-02-28 3 views
2

У меня есть функция, которая обрабатывает перетаскивать сбрасывая файлы на моей странице:Удаление элементов из упал FileList

function createDropHandlers() { 
    var target = document; 
    if (target === null) { 
    return false; 
    } 

    // attach the 'dragover' event to the container 
    target.addEventListener('dragover', function(event) { 
    event.preventDefault(); 
    }, true); 

    // attach the 'drop' event to the container 
    target.addEventListener('drop', function(event) { 
    event.preventDefault(); 
    var files = event.dataTransfer.files; 

    // if (files.length > 3) 
    // do something like 
    // files.slice(files.length-3, files.length); 

    for (var i = 0; i < files.length; i++) { 
     processFile(files[i]); 
     // ... 
    } 
    }, true); 
} 

То, что я хотел бы сделать это до моего for цикла (и до «обработки» файлы в любой), чтобы проверить, было ли перетаскивано более 3 файлов, и если да, просто нарежьте «массив» на последние 3 элемента. Я знаю, что FileList читается только, поэтому я не уверен, какие у меня варианты для достижения этого ...
Я не буду загружать файлы, а после «обработки» их и мне не понадобятся объекты File. Все, что мне нужно сделать, это проверить, являются ли файлы аудиофайлами, прочитать некоторые метаданные и отобразить метаданные на странице.

ответ

2

slice() - это метод из прототипа массива. В то время как он возвращает новый массив, он может быть не в прототипе FileList. Вы можете использовать метод Array.prototype.slice и применить его на списке файлов:

Array.prototype.slice.call(fileList); //will return an array-copy of the filelist 
Array.prototype.slice.call(fileList, 0, 3); //Then simply use the slice arguments at your convenience 

Вы можете использовать (и будет видеть часто в JS-библиотек кода) этот трюк на аргументы, а также. Обратите внимание, что срез не изменяет исходный объект, например, splice().

вы можете проверить https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice#Array-like для объяснения на MDN.

Смежные вопросы