Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.03.2019, 10:46
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 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);
        });
});


Может кто подскажет ссылку, где посмотреть можно поиск в таблице через массив. Найти не могу.
Ответить с цитированием
  #2 (permalink)  
Старый 26.03.2019, 11:11
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 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();
});
Ответить с цитированием
  #3 (permalink)  
Старый 26.03.2019, 11:34
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 26.03.2019, 11:50
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 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();
Ответить с цитированием
  #5 (permalink)  
Старый 26.03.2019, 11:52
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 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();
Ответить с цитированием
  #6 (permalink)  
Старый 26.03.2019, 13:53
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 26.03.2019, 14:01
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Artur_Hopf,
alert('2100'.indexOf('3120')>=0);
Ответить с цитированием
  #8 (permalink)  
Старый 26.03.2019, 14:08
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

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


И наш поиск будет думать что нашел 3210. Как фильтровать только конкретную ячеку?
Ответить с цитированием
  #9 (permalink)  
Старый 26.03.2019, 14:11
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Вот так если до этого столбика достучатся:
var test = $(this).find('td')[1].innerHTML
Ответить с цитированием
  #10 (permalink)  
Старый 26.03.2019, 14:14
Профессор
Отправить личное сообщение для Artur_Hopf Посмотреть профиль Найти все сообщения от Artur_Hopf
 
Регистрация: 13.03.2018
Сообщений: 278

Все, разобрался =)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить кнопку удалить для ячеек таблицы CryNet Общие вопросы Javascript 7 30.01.2019 21:23
Поправить фильтр для инпута MC-XOBAHCK Общие вопросы Javascript 7 17.10.2018 10:56
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53
onmouseover отрабатывает по разному для одинаковых ячеек таблицы ilshat Events/DOM/Window 2 11.02.2009 12:25