Разбиваете введённую строку на два числа.
Для каждого числа определяете диапазон, умножив его на 0,85 и 1,15.
1- может отсутствовать на данный момент временину эти мелочи, это уже дополнительная логика, никто тут целый багаж писать кода не будет для ваших хотелок, тут лишь подсказать могут, пример написать минимальный ну и всё
2 - у клиента появляется возможность выбрать близкий по размеру, но более подходящий по расцветке ковер
чтобы в неизменном виде размер 1,2*3,5 "искался с допусками по размерам". Про разбивку на два числа - я уже понял, но этот вариант не совсем устраивает.- разбить на числа - это временная операция, это вообще не как не отразиться на вашей строке которая изначально там '1,2*3,5', если напрямую её не изменять ( и вряд ли это кто-то будет делать )
function myFunction() {
function parseSize(value) {
var result = value.replaceAll(',', '.').replaceAll(/[^\d.]/g, ' ').match(/ *(\d+(?:\.\d+)?) +(\d+(?:\.\d+)?) */)
if (result && result.length >= 3) {
return {
w: +result[1],
h: +result[2],
};
}
return null;
}
var PERCENT = 15;
var input, filter, ul, li, a, i, txtValue, empty, noResult, lis;
inputLength = document.getElementById("myInputLength");
filterSize = parseSize(inputLength.value);
if (filterSize) {
filterSize.w = {
min: filterSize.w * (1 - (PERCENT / 100)),
max: filterSize.w * (1 + (PERCENT / 100)),
};
filterSize.h = {
min: filterSize.h * (1 - (PERCENT / 100)),
max: filterSize.h * (1 + (PERCENT / 100)),
};
}
inputWidth = document.getElementById("myInputWidth");
filterWidth = inputWidth.value.toUpperCase();
inputColor = document.getElementById("myInputColor").value.toUpperCase();
inputHeight = document.getElementById("myInputPileHeight");
filterHeight = inputHeight.value.toUpperCase();
inputType = document.getElementById("myInputType").value.toUpperCase();
ul = document.getElementById("myUL");
li = ul.getElementsByTagName("li");
// Изначально подразумеваем что список у нас пустой
empty = true;
// Отбираем элемент NoResult
noResult = document.getElementById("noResult");
// Цикл по всем элементам списка, и скрываем те блоки которые не соответствуют запросу введенному в поиск.
if (filterWidth.indexOf('.') > -1) {
filterWidth = filterWidth.slice(0, filterWidth.indexOf('.')) + ',' + filterWidth.slice((filterWidth.indexOf('.') + 1));
}
if (filterHeight.indexOf('.') > -1) {
filterHeight = filterHeight.slice(0, filterHeight.indexOf('.')) + ',' + filterHeight.slice((filterHeight.indexOf('.') + 1));
}
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
txtValue = a.textContent || a.innerText;
var size = parseSize(txtValue);
if (
(filterSize && size && filterSize.w.min <= size.w && size.w <= filterSize.w.max && filterSize.h.min <= size.h && size.h <= filterSize.h.max) &&
txtValue.toUpperCase().indexOf(filterWidth) > -1 &&
txtValue.toUpperCase().indexOf(inputColor) > -1 &&
txtValue.toUpperCase().indexOf(filterHeight) > -1 &&
txtValue.toUpperCase().indexOf(inputType) > -1
) {
li[i].style.display = "";
empty = false; // Если найден хотя бы 1 элемент
} else {
li[i].style.display = "none";
}
}
if (empty) {
noResult.style.display = "block"; // Если пустой список
} else {
noResult.style.display = "none";
}
}