diff --git a/labs/lab1/JavaScript/filter.js b/labs/lab1/JavaScript/filter.js index 37dd564..82c32a5 100644 --- a/labs/lab1/JavaScript/filter.js +++ b/labs/lab1/JavaScript/filter.js @@ -19,66 +19,73 @@ const dataFilter = (dataForm) => { // перебираем все элементы формы с фильтрами for (const item of dataForm.elements) { - + // получаем значение элемента let valInput = item.value; // если поле типа text - приводим его значение к нижнему регистру if (item.type === "text") { valInput = valInput.toLowerCase(); - } + } - if (item.type === "number"){ - if (valInput.value === ""){ - if(valInput.name.includes("From")){ + if (item.type === "number") { + if (valInput === "") { + if (item.id.includes("From")) { valInput = -Infinity; } - else{ + else { valInput = Infinity; } } - valInput = Number(valInput); + else { + valInput = Number(valInput); + } } - // формируем очередной элемент ассоциативного массива + // формируем очередной элемент ассоциативного массива dictFilter[item.id] = valInput; - } + } return dictFilter; } // фильтрация таблицы -const filterTable = (data, idTable, dataForm) =>{ - +const filterTable = (data, idTable, dataForm) => { + // получаем данные из полей формы const datafilter = dataFilter(dataForm); - + // выбираем данные соответствующие фильтру и формируем таблицу из них let tableFilter = data.filter(item => { /* в этой переменной будут "накапливаться" результаты сравнения данных с параметрами фильтра */ let result = true; - + // строка соответствует фильтру, если сравнение всех значения из input // со значением ячейки очередной строки - истина - Object.entries(item).map(([key, val]) => { - + Object.entries(item).map(([key, val]) => { + // текстовые поля проверяем на вхождение if (typeof val == 'string') { - result &&= val.toLowerCase().includes(datafilter[correspond[key]]) + result &&= val.toLowerCase().includes(datafilter[correspond[key]]) } - - if (typeof val == 'number') { - result &&= datafilter[correspond[key]+"From"]<=Number(val)&& datafilter[correspond[key]+"To"]>=Number(val) - } - // САМОСТОЯТЕЛЬНО проверить числовые поля на принадлежность интервалу - }); - return result; - }); + // САМОСТОЯТЕЛЬНО проверить числовые поля на принадлежность интервалу + if (typeof val == 'number') { + result &&= datafilter[correspond[key][0]] <= Number(val) && datafilter[correspond[key][1]] >= Number(val) + } + + }); + + return result; + }); // САМОСТОЯТЕЛЬНО вызвать функцию, которая удаляет все строки таблицы с id=idTable - clearTable(); + clearTable(idTable); // показать на странице таблицу с отфильтрованными строками - createTable(tableFilter, idTable); + createTable(tableFilter, idTable); +} + +const clearFilters = (form) => { + form.querySelectorAll(`& input[type="text"],& input[type="number"]`).forEach((elem) => elem.value = null) } \ No newline at end of file diff --git a/labs/lab1/JavaScript/main.js b/labs/lab1/JavaScript/main.js index e55046d..47d768d 100644 --- a/labs/lab1/JavaScript/main.js +++ b/labs/lab1/JavaScript/main.js @@ -4,20 +4,16 @@ document.addEventListener("DOMContentLoaded", function () { function doInit() { createTable(buildings, 'list'); - const clearFiltersButton = document.getElementById("clearFiltersButton") + const clearFiltersButton = document.getElementById("clearFiltersButton"); clearFiltersButton.addEventListener("click", (event) => { - clearTable("list") - + clearFilters(filter); + filterTable(buildings,'list',filter) }) - const applyFiltersButton = document.getElementById("applyFiltersButton") + const applyFiltersButton = document.getElementById("applyFiltersButton"); applyFiltersButton.addEventListener("click", (event) => { - filterTable() - + filterTable(buildings,'list',filter) }) - - - } diff --git a/labs/lab1/JavaScript/table.js b/labs/lab1/JavaScript/table.js index 02a9a51..4ad7a5a 100644 --- a/labs/lab1/JavaScript/table.js +++ b/labs/lab1/JavaScript/table.js @@ -1,19 +1,26 @@ const createTable = (data, idTable) => { const table = document.getElementById(idTable); + if (data.length == 0) { + return; + } const header = Object.keys(data[0]); - + /* создание шапки таблицы */ - const headerRow = createHeaderRow(header); - table.append(headerRow); - + if (!table.firstElementChild) { + const headerRow = createHeaderRow(header); + table.append(headerRow); + } + /* создание тела таблицы */ - const bodyRows = createBodyRows(data); + const bodyRows = createBodyRows(data); table.append(bodyRows); }; const clearTable = (idTable) => { const table = document.getElementById(idTable); - table.removeChild(table.children[1]); + if (table.children.length > 1) { + table.removeChild(table.children[1]); + } } const createHeaderRow = (headers) => { @@ -26,9 +33,9 @@ const createHeaderRow = (headers) => { return tr; }; -const createBodyRows = (rows) =>{ +const createBodyRows = (rows) => { const body = document.createElement('tbody'); - rows.forEach(row =>{ + rows.forEach(row => { const rowElement = document.createElement('tr'); for (let key in row) { const td = document.createElement('td'); diff --git a/labs/lab1/index.html b/labs/lab1/index.html index d1e431c..057df54 100644 --- a/labs/lab1/index.html +++ b/labs/lab1/index.html @@ -12,39 +12,60 @@
+