Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Método remove()? Não é uma função?

Na aula o professor menciona sobre o método remove(). Mas observei que toda vez que se usa um método, ele geralmente no VS Code, tem uma cor específica e não tem 2 parênteses. Já, quando usa uma função reservada do javascript, ela também além da cor ser diferente, ela tem 2 parênteses na frente. Nesse caso o remove() não é uma função?

Código completo

// Função de invocação imediata ==> Vamos utilizar a “IIFE”, ou Immediately Invoked Function Expression ou “Função de Invocação Imediata”. Faz com o que ninguém tenha acesso a nenhuma função de dentro do código, apenas tenha acesso a interação com a página
(() => {

    const criarTarefa = (evento) => {

        evento.preventDefault();

        const lista = document.querySelector('[data-list]');
        const input = document.querySelector('[data-form-input]');
        const valor = input.value;

        const tarefa = document.createElement('li'); /* Cria um novo elemento */
        tarefa.classList.add('task'); /* Adciona a classe na 'li' criada */
        const conteudo = `<p class="content">${valor}</p>`; /* “Template String” */

        tarefa.innerHTML = conteudo; /* Faz aparecer a tag 'p' com o seu valor dentro das chaves */

        tarefa.appendChild(BotaoConclui()); /* Cria o botão através da função, com escrita, estilo e evento de click */
        tarefa.appendChild(BotaoDeleta());
        lista.appendChild(tarefa); /* Cria(anexa) o elemento filho dentro do elemento pai */
        input.value = " ";
    }

    const novaTarefa = document.querySelector('[data-form-button]');

    novaTarefa.addEventListener('click', criarTarefa);

    const BotaoConclui = () => {
        const botaoConclui = document.createElement('button');

        botaoConclui.classList.add('check-button'); // add => adiciona o nome da classe que está entre as aspas simples
        botaoConclui.innerText = 'concluir'; // Adciona o texto que está entre as aspas simples dentro do botão

        botaoConclui.addEventListener('click', concluirTarefa);

        return botaoConclui;
    }

    const concluirTarefa = (evento) => {
        const botaoConclui = evento.target; // sabe qual o alvo do evento, ou seja, em quem clicou ou qual elemento foi clicado

        const tarefaCompleta = botaoConclui.parentElement; // Sobe um nó na árvore, que é a 'li', ou seja, busca o pai do elemento que é pai do botão

        tarefaCompleta.classList.toggle('done'); // .toggle() => Método que executa o efeito de rabisco do CSS e é capturado a classe pelo 'classList'. o toggle faz um verdadeiro ou falso (booleano)
    }

    const BotaoDeleta = () => { // inicia com letra maiúscula pelo motivo de ser um Componente
        const botaoDeleta = document.createElement('button');

        botaoDeleta.innerHTML = 'Deletar';
        botaoDeleta.addEventListener('click', deletarTarefa);

        return botaoDeleta;
    }

    const deletarTarefa = (evento) => {
        const botaoDeleta = evento.target;

        const tarefaCompleta = botaoDeleta.parentElement;

        tarefaCompleta.remove(); // método(função) que remove

        return botaoDeleta;
    }

})(); //função de invocação imediata


/* “inner HTML” => altera o valor da li */

/* classList => Acessa a lista de classe que a 'li' disponibiliza. */

/* addEventListener => adciona um evento de escuta */

/* addEventListener('click') => captura o click através do evento de escuta. Esse evento fica escutanto se haverá algum click.

/* appendChild => Existem outros métodos que podemos utilizar para manipular nós:

insertBefore(pai, filho): Coloca um nó antes do outro.
replaceChild( elemento1, elemento2): Substitui o nó elemento 1 pelo nó elemento2.
removeChild(elemento): Remove um nó da árvore. */
3 respostas
solução!

Essa confusão para compreender essa diferença é mais comum do que se imagina.

Mas, basicamente, funções e métodos são formas de organização de código. E essa organização vai depender muito do paradigma(padrão) que se adota para escrever um código. JS é uma linguagem multiparadigma, ou seja, podemos usar ela para trabalhar com programação orientada a objetos ou programação funcional, por exemplo.

Se estiver usando orientação a objetos, usaremos métodos para definir comportamentos de objetos. Se estivermos usando programação funcional, funções serão o carro chefe. E, no caso do JS, ainda é possível mesclar esse paradigmas. Recomento ler esse post a respeito dessa diferença.

No caso citado por você, temos remove() como método de qualquer elemento do DOM (Document Object Model); E qualquer elemento do DOM é considerado um objeto JS e, por isso, contém seus próprios métodos, dentre eles remove(), addEventListener(), removeEventListener(), append(), dentre outros. Nesse link, tem uma lista de métodos que podem ser utilizados com elementos do DOM, bem como exemplos de uso.

Obrigado Vanessa!

Disponha! =)