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