filters done
This commit is contained in:
@@ -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)
|
||||
}
|
||||
@@ -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)
|
||||
})
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user