Olá Jose Carlos,
Então, pelo o que eu entendi você queria fazer algo assim né:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", this.remove());
});
O código acima não funcionaria, por alguns motivos. O primeiro é que o this ali naquele contexto é a window, e não o paciente. Você pode verificar isto fazendo assim:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", console.log(this));
});
Resultado no console:
Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}
Window {speechSynthesis: SpeechSynthesis, caches: CacheStorage, localStorage: Storage, sessionStorage: Storage, webkitStorageInfo: DeprecatedStorageInfo…}
....
Logo, fazer window.remove() não faria muito sentido. E repare que se você testar o código acima, o console.log será executado imediatamente no console. sem esperar o doubleclick. Comentarei isso mais abaixo.
Você pode pensar em contornar o problema do this naquele contexto ser a window trocando o this direto por uma refêrencia ao paciente, fazendo assim:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", paciente.remove());
});
Este código acima até funciona de certo modo, mas ele remove todos os pacientes da página sem aguardar pelo duplo clique em cada paciente. Isto acontece por que o segundo parâmetro da função addEventListener deve ser uma função e não uma chamada para a função.
Quando o seu javascript passar pelo código e ler a parte paciente.remove(), ele irá executar a função remove imediatamente, afinal é isto que você disse para ele colocando os parênteses após o remove, que aquela função deve ser chamada ali.
Se quisermos fazer o código funcionar , temos que dizer a addEventListener qual função deve ser chamada , e não executá-la passando com os parênteses.
Então, um código que funcionaria seria o seguinte:
var pacientes = document.querySelectorAll(".paciente");
pacientes.forEach(function(paciente) {
paciente.addEventListener("dblclick", paciente.remove);
});
Repare, não passsei os () depois do remove, não quero executar a função agora, apenas indicar ao addEventListener qual função deve ser chamada quando o usuário der um doubleclick no paciente.
Vale notar também, que neste caso específico é possível fazer tudo em uma única linha, afinal temos acesso a variável paciente pois estamos dentro de um forEach(), mas em geral é muito comum vermos por ai ser utilizado uma função anônima como segundo parâmetro do addEventListener, até mesmo quando temos apenas uma instrução.
Espero que tenha ficado claro, se não foi esta a sua dúvida ou ainda precisar de esclarecimentos, é só comentar.