Фильтр таблицы из массива, для получения нескольких совпадений.
Добрый день. Подскажите как можно отфильтровать таблицу, если нужно получить несколько строк?
Например есть массив: 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); }); }); Может кто подскажет ссылку, где посмотреть можно поиск в таблице через массив. Найти не могу. |
Попробуйте так:
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(); }); |
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 в данном случае не нужен, поиск только по цифрам, без букв. |
this.textContent пустые идут:
$("#myTable tr").hide().filter(function() { return searchValues.some(function(value) { console.log(this.textContent); //все undefined console.log($(this).text()); //пусто }); }).show(); |
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(); |
Подскажите пожалуйста. Как исправить чтобы искало точное совпадение в ячейке?
Например в массиве есть такое число 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(); |
Artur_Hopf,
alert('2100'.indexOf('3120')>=0); |
Nexus,
нет, не в том дело. Мы делаем поиск по таблице всей $("#myTable tr") допустим перед нашей ячейкой есть такая запись: столбик1 | стоблик 2 Кабинет №3 | 2100 И наш поиск будет думать что нашел 3210. Как фильтровать только конкретную ячеку? |
Вот так если до этого столбика достучатся:
var test = $(this).find('td')[1].innerHTML |
Все, разобрался =)
|
Часовой пояс GMT +3, время: 13:36. |