#javascript #html #парсер
в теле пишу функцию.
onload = function () {
// вешаем обработчик события, срабатывающий при изменении input'а
document.querySelector('fileInput').addEventListener('change', onFilesSelect,
false);
}
имя inputa записал какое имя записано в id в html.
в коде присутствует функция которая должна запускаться при выборе файла.
вот она.
function onFilesSelect(e) {
// получаем объект FileList
var files = e.target.files,
// div, куда помещается таблица с информацией о файлах
output = document.getElementById('output'),
// таблица с информацией
table = document.createElement('table'),
// её тело
tbody = document.createElement('tbody'),
// строка с информацией о файле (Перезаписывается каждый шаг цикла)
row,
// FileReader (Создаётся для каждого файла)
fr,
// объект file из FileList'a
file,
// массив с информацией о файле
data;
// Чистим контейнер с таблицей
output.innerHTML = '';
// Вставляем в таблицу её тело
table.appendChild(tbody);
// Определяем заголовок таблицы (Названия колонок)
tbody.innerHTML =
"Имя MIME тип Размер (байт) Превью ";
// Перебираем все файлы в FileList'е
for(var i = 0; i < files.length; i++) {
file = files[i];
// Если в файле содержится изображение
if(/text.*/.test(file.type)) {
// узнаём информацию о нём
data = [file.name, file.type, file.size];
fr = new FileReader();
// считываем его в строку base64
fr.readAsDataURL(file);
// как только файл загружен
fr.onload = (function (file, data) {
alert("Loaded");
}) (file, data);
// Если файл не изображение
} else {
// то вместо превью выводим соответствующую надпись
data = [file.name, file.type, file.size, 'Файл не является изображением'];
appendFileInfo(tbody, data);
}
}
// помещаем таблицу с информацией о файле в div
output.appendChild(table);
}
Это из примера с загрузкой изображения.Пытался переделать на текст. Тишина.
Что не так, и может можно сделать проще? В итоге мне нужно получить строку, найти
нужную последовательность символов, вставить текст и сохранить файл. Все это происходит
при работе с браузером, но только локально, скорее всего только на Хром'е это нужно
будет совершить.
в js файле моего расширения используется код jquery.
мне кажется этот код
function onFilesSelect(e) {
alert("Loaded");
}
не может выполнится в нутри его(jquery) функций. Как правильно его разместить вне
функций jquery?
сам инпут в html
Ответы
Ответ 1
Можно воспользоваться методом .readAsText(...). В результате в функции onload можно будет получить текст загруженного файла. С сохранением все печальнее. Раньше была речь про FileSaver interface и метод saveAs объекта window, но, похоже, что-то не задалось, и теперь про него нет упоминаний. Но, можно создать элемент A, установить свойству href - objectURL для созданного Blob, в котором хранится измененный текст, добавить ему значение в свойство download и программно вызвать click. В этом случае, сохранится файл с именем указанным в свойстве download. В зависимости от настроек браузера может показаться окошко с выбором места для сохранения, либо сохранится в папку для загрузок. Пример: function saveFile(file, blob) { var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.download = file.name; a.href = url; a.click(); // очищаем object URL setTimeout(function() { URL.revokeObjectURL(url); }, 2000); } function onFilesSelect(e) { // получаем объект FileList var files = e.target.files; // Перебираем все файлы в FileList'е for (var i = 0; i < files.length; i++) { let file = files[i]; var fileReader = new FileReader(); fileReader.onload = function(e) { // сохраняем текст файла в переменную var textContent = e.target.result; // выводим на странице document.getElementById('data').innerHTML = textContent; // меняем что-то в строке var replaced = textContent.replace(/\w/g, '1$&1'); // формируем blob var blob = new Blob([replaced]); // пытаемся сохранить if (!window.saveAs) { saveFile(file, blob); } else { window.saveAs(blob, file.name); } } // читаем файл как текст fileReader.readAsText(file); } }
Комментариев нет:
Отправить комментарий