Фильтр таблицы из массива, для получения нескольких совпадений.
Добрый день. Подскажите как можно отфильтровать таблицу, если нужно получить несколько строк?
Например есть массив:
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, время: 21:48. |