Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Filtrar com os valores da linha completa da tabela ou com 2 elementos ou mais da linha .

Boa tarde !!

Fiz o exemplo do filtro em uma tabela minha , mas queria saber com eu poderia fazer com 2 ou mais elementos da mesma linha da tabela ?

Ex.: Na tabela tenho os seguintes campos (Razão social , CNPJ, endereço, telefone)

Hoje consigo fazer com um elemento (Razão social) , onde n averdade ficaria mais melhor se conseguise filtrar por 02 ou mais elementos .

(Razão Social e endereço ) ou (Razão social , CNPJ, endereço, telefone).

1 resposta
solução!

Olá, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Para filtrarmos verificando duas ou mais células de uma linha, basta realizarmos a coleta dos valores das células de interesse, e após isso será necessário utilizar o operador lógico AND (&&) em conjunto com a estrutura condicional if. Dessa forma, será verificado se a expressão regular não corresponde a nenhum dos três campos (razaoSocial, endereco e cnpj) da tabela.

Se essa condição for verdadeira, o cliente é marcado como invisível. Caso contrário, se pelo menos um dos campos tiver uma correspondência positiva com a expressão regular, o paciente será apresentado.

No arquivo JavaScript responsável pelo filtro, dentro do evento input, iremos realizar a coleta de todas as linhas da tabela (tr) e destas linhas coletarmos as informações das células Razao Social, Endereço e CNPJ.

var tdRazaoSocial = cliente.querySelector(".info-razaosocial");
var tdEndereco = cliente.querySelector(".info-endereco");
var tdCNPJ = cliente.querySelector(".info-cnpj");

Após a coleta, basta verificarmos se o valor informado no campo de pesquisa é diferente do valor presente em cada célula (td) caso seja, adicionamos a ela a classe CSS invisivel, ocultando assim o elemento. Com o uso do operador lógico AND (&&) podemos verificar múltiplas células.

// se nao for igual a razão social e nao for igual a endereço e não for igual a CNPJ adiciona a classe invisível
if (!expressao.test(razaoSocial) && !expressao.test(endereco) && !expressao.test(cnpj)) {
    cliente.classList.add("invisivel");
} else {
    cliente.classList.remove("invisivel");
}

Assim, caso queira adicionar o filtro a novas células da linha, basta coletar seu conteúdo e adicionar na verificação se o conteúdo é diferente do conteúdo que foi digitado no campo de busca. O resultado é apresentado abaixo:

GIF. Neste GIF é apresentado uma página web que contém um campo de pesquisa na parte superior esquerda da tela. Abaixo do campo de pesquisa há uma tabela com quatro colunas com os seguintes nomes da esquerda para a direita: Razão social, CNPJ, Endereço, Telefone. Essa tabela possui quatro linhas com conteúdos cadastrais de empresas fictícias. O usuário utiliza o campo de pesquisa, primeiramente digitando o nome da Razão Social, logo após pesquisa pelo CNPJ e finalmente utilizando o nome da rua. A cada pesquisa, as linhas que não correspondem ao termo pesquisado são ocultadas da tabela.

Deixo abaixo o código completo em JavaScript


var campoFiltro = document.querySelector("#filtrar-tabela");

campoFiltro.addEventListener("input", function() {
    var clientes = document.querySelectorAll(".cliente");

    if (this.value.length > 0) {
        for (var i = 0; i < clientes.length; i++) {
            var cliente = clientes[i];
            var tdRazaoSocial = cliente.querySelector(".info-razaosocial");
            var tdEndereco = cliente.querySelector(".info-endereco");
            var tdCNPJ = cliente.querySelector(".info-cnpj");


            var razaoSocial = tdRazaoSocial.textContent;
            var endereco = tdEndereco.textContent;
            var cnpj = tdCNPJ.textContent;

            var expressao = new RegExp(this.value, "i");

            // se nao for igual a razão social e nao for igual a endereço e não for igual a CNPJ adiciona a classe invisível
            if (!expressao.test(razaoSocial) && !expressao.test(endereco) && !expressao.test(cnpj)) {
                cliente.classList.add("invisivel");
            } else {
                cliente.classList.remove("invisivel");
            }
        }
    } else {
        for (var i = 0; i < clientes.length; i++) {
            var cliente = clientes[i];
            cliente.classList.remove("invisivel");
        }
    }
});

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!