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

Qual e o erro ? Nao consigo fazer o filtro funcionar.

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

campoFiltro.addEventListener("input", function(){
  this.value;
  });

  var pacientes = document.querySelectorAll (".paciente");

  if(this.value.length > 0){
      for (var i = 0; i <paciente.length; i++) {
        var paciente = pacientes[i];
        var tdNome = paciente.querySelector(".info-nome");
        var nome = tdNome.textContent;
        var expressao = new  RegExp(this.value,"i");
        if (!expressao.test(nome)){
            paciente.classList.add("invisivel");
      } else {
              paciente.classList.remove("invisivel");
      }
      }
      } else {
      for (var i = 0; i <pacientes.length; i++) {
        var paciente = pacientes[i];
        paciente.classList.remove("invisivel");
      }
    }

;
1 resposta
solução!

Olá Ana! Tudo bem? Bom, eu copiei o seu código e implementei no meu aqui (fiz o mesmo curso), fiz alguns comentários e ajustes nele:

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

campoFiltro.addEventListener("input", function(){
//   this.value; /*Essa linha não diz nada, assim como seu "EventListener" deve escutar e executar seu filtro*/
//   }); /*toda vez que o usuário teclar. Ou seja, a função deve englobar todo código.*/

  var pacientes = document.querySelectorAll(".paciente");

   //if(this.value.length > 0){ /*Este "if" está dizendo: Se tem algo escrito no campoFiltro, execute isto:... */
// Ao meu ver, entra em conflito com a função do "EventListener". A função deste "if" neste código é testar o campoFiltro após a varredura dos pacientes.*/

      for (var i = 0; i < pacientes.length; i++) { /*Aqui faltava um "s" em pacientes*/
        var paciente = pacientes[i];
        var tdNome = paciente.querySelector(".info-nome");
        var nome = tdNome.textContent;
        var expressao = new  RegExp(this.value,"i");

        if (this.value.length>0) {        
        if (!expressao.test(nome)){
            paciente.classList.add("invisivel");
      } else {
              paciente.classList.remove("invisivel");
      }
      }else {
          paciente.classList.remove("invisivel");
// Neste "else", você está dizendo: Se este if (campoFiltro.value>0) for falso, faça isto:...
// Portanto, quando o campoFiltro estiver vazio, você quer que apareça todos os pacientes, removendo então a classe invisível. 
    //   for (var i = 0; i <pacientes.length; i++) { 
    //     var paciente = pacientes[i];
    //     paciente.classList.remove("invisivel");
    //   }
            }
    }
})

Depois disso funcionou o filtro. Espero ter ajudado! Se eu puder ajudar em algo mais ou tiver algum comentário a fazer, estou aqui!

Abraço e bons estudos