1
resposta

Nova estratégia para o filtro

Porque não evitar redundância de código com o seguinte trecho:

var campoFiltro = document.querySelector('#filtrar-tabela'); campoFiltro.addEventListener("input",function(){ var pacientes = document.querySelectorAll('.paciente'); for(var i = 0; i < pacientes.length; i++){ var paciente = pacientes[i]; var tdNome = paciente.querySelector(".info-nome"); var nome = tdNome.textContent; console.log(this.value); if (nome != this.value && this.value.length > 0 ) { paciente.classList.add("invisivel"); }else{ paciente.classList.remove("invisivel"); } } });

1 resposta

Salve, Adauto!

É uma abordagem. Porém, utilizando a lógica que você apontou:

var campoFiltro = document.querySelector('#filtrar-tabela');
campoFiltro.addEventListener("input", function () {
  var pacientes = document.querySelectorAll('.paciente');
  for (var i = 0; i < pacientes.length; i++) {
    var paciente = pacientes[i];
    var tdNome = paciente.querySelector(".info-nome");
    var nome = tdNome.textContent;
    console.log(this.value);
    if (nome != this.value && this.value.length > 0) {
      paciente.classList.add("invisivel");
    } else {
      paciente.classList.remove("invisivel");
    }
  }
});

Independente se eu tenho o value, nó vamos percorrer o DOM buscando a td com a classe info-nome:

var tdNome = paciente.querySelector(".info-nome");

E também fazer a comparação, mesmo que eu não tenha value:

if (nome != this.value && this.value.length > 0)

É um caso a se pensar, e não necessariamente escrever menos código é interessante.

Percorrer o DOM é sempre um custo que vale a pena ser considerado.

Mas é bacana sempre buscar alternativas, quase sempre existem mais de uma solução para um mesmo problema.

Acredito que uma boa métrica, nesse caso, é saber quantos pacientes normalmente vamos ter na tabela.