Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Фильтр таблицы из массива, для получения нескольких совпадений. (https://javascript.ru/forum/misc/77114-filtr-tablicy-iz-massiva-dlya-polucheniya-neskolkikh-sovpadenijj.html)

Artur_Hopf 26.03.2019 10:46

Фильтр таблицы из массива, для получения нескольких совпадений.
 
Добрый день. Подскажите как можно отфильтровать таблицу, если нужно получить несколько строк?
Например есть массив:
var array= {
	'cero':['234', '153', '321' ,'123'],
	'uno':['654', '344'],
    'dos':['190', '235', '111'],
};


Например выбрали мы array['dos'] и таблица выдала строки с совпадениями.

Сейчас же используется обычный поиск:
$("#myInput").on("keyup", function() {
        var value = $(this).val().toLowerCase();
        $("#myTable tr").filter(function() {
            $(this).toggle($(this).text().replace(/ё/gi, 'е').toLowerCase().indexOf(value.replace(/ё/gi, 'е')) > -1);
        });
});


Может кто подскажет ссылку, где посмотреть можно поиск в таблице через массив. Найти не могу.

Nexus 26.03.2019 11:11

Попробуйте так:
var array = { //это ни разу не массив
    'cero': ['234', '153', '321', '123'],
    'uno': ['654', '344'],
    'dos': ['190', '235', '111'],
};


$("#myInput").on("keyup", function() {
    const searchValues = array.dos;

    function normalizeValue = function(string) {
        return string.toLowerCase().replace(/ё/g, 'е');
    };

    $("#myTable tr").hide().filter(function() {
        return searchValues.some(function(value) {
            return normalizeValue(this.textContent).indexOf(
                normalizeValue(value)
            ) >= 0;
        });
    }).show();
});

Artur_Hopf 26.03.2019 11:34

Nexus,
Попробовал так написать, не получилось
var array = { //это ни разу не массив
    'cero': ['234', '153', '321', '123'],
    'uno': ['654', '344'],
    'dos': ['190', '235', '111'],
};
	
	const searchValues = array.dos;

    $("#myTable tr").hide().filter(function() {
        return searchValues.some(function(value) {
			console.log(value);
			return $(this).text().indexOf(value) >= 0;
            //return this.textContent.indexOf(value) >= 0;
        });
    }).show();

Если написать просто return this.textContent.indexOf(value) >= 0; будет жаловаться на indexOf

Uncaught TypeError: Cannot read property 'indexOf' of undefined

normalizeValue в данном случае не нужен, поиск только по цифрам, без букв.

Artur_Hopf 26.03.2019 11:50

this.textContent пустые идут:
$("#myTable tr").hide().filter(function() {
        return searchValues.some(function(value) {
			console.log(this.textContent); //все undefined
			console.log($(this).text());  //пусто
        });
    }).show();

Artur_Hopf 26.03.2019 11:52

Nexus,
Разобрался, спасибо большое, так работает =)
var array = { //это ни разу не массив
    'cero': ['234', '153', '321', '123'],
    'uno': ['654', '344'],
    'dos': ['190', '235', '111'],
};
	
const searchValues = array.dos;

$("#myTable tr").hide().filter(function() {
    var test = this;
     return searchValues.some(function(value) {
            return test.textContent.indexOf(value) >= 0;
     });
}).show();

Artur_Hopf 26.03.2019 13:53

Подскажите пожалуйста. Как исправить чтобы искало точное совпадение в ячейке?

Например в массиве есть такое число 3120. Во время поиска оно так же выведет число 2100 если перед ним в другой ячейке в конце есть цифра 3. Как это исправить?
var array = { //это ни разу не массив
    'dos': ['3120']
};
	
const searchValues = array.dos;

$("#myTable tr").hide().filter(function() {
    var test = this;
     return searchValues.some(function(value) {
            return test.textContent.indexOf(value) >= 0;
     });
}).show();

Nexus 26.03.2019 14:01

Artur_Hopf,
alert('2100'.indexOf('3120')>=0);

Artur_Hopf 26.03.2019 14:08

Nexus,
нет, не в том дело. Мы делаем поиск по таблице всей $("#myTable tr")
допустим перед нашей ячейкой есть такая запись:
столбик1   | стоблик 2
Кабинет №3 | 2100


И наш поиск будет думать что нашел 3210. Как фильтровать только конкретную ячеку?

Artur_Hopf 26.03.2019 14:11

Вот так если до этого столбика достучатся:
var test = $(this).find('td')[1].innerHTML

Artur_Hopf 26.03.2019 14:14

Все, разобрался =)


Часовой пояс GMT +3, время: 13:36.