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

forEach não funcionando

Bom dia, com a logica apresentada nessa aula 8 do curso "JS, programando na linguagem da web", o professor usou o for normal para percorrer um array, porem eu tentei usar o forEach com a mesma logica dele mas n funcionou. Código do for normal:

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

Código do forEach:

pacientes.forEach(function(paciente){
        var tdnome = paciente.querySelector(".info-nome");
        var nome = tdnome.textContent;
        if(nome!=this.value){
            paciente.classList.add("invisivel");
        }else{
            paciente.classList.remove("invisivel");
        }

A o código funcionou apenas para o for normal.

1 resposta
solução!

Olá, Leornado!

O problema é o significado do this.

Numa função que trata um evento (um Event Listener), o this é o elemento que sofreu o evento.

Já no forEach, o this é outra coisa: é o objeto global Window, nesse caso específico.

Então, já que você quer o value do elemento <input> em que houve o evento input, guarde o valor em uma variável!

Assim:

var digitado = this.value;
pacientes.forEach(function(paciente){
        var tdnome = paciente.querySelector(".info-nome");
        var nome = tdnome.textContent;
        if(nome!=digitado){
            paciente.classList.add("invisivel");
        }else{
            paciente.classList.remove("invisivel");
        }
});

Vale a pena usar uma Regex, como é feito na aula, para filtrar por partes do nome do paciente!