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

[Dúvida] Qual a diferença de uso entre .textContent e .innerHTML?

Fiz o primeiro desafio, do Alugames. Para mudar o texto nos botões, eu usei .innerHTML, mas os instrutores usaram .textContent. Eu consegui fazer o texto no botão mudar, mas como a resposta "oficial" fez isso de uma maneira diferente, me surgiu a dúvida: qual a diferença entre os dois? E quando eu devo usar um ou outro?

Meu código ficou assim:

function alterarStatus(id) {
    let game = document.getElementById('game-' + id);
    let image =game.querySelector('.dashboard__item__img');
    let botao = game.querySelector('.dashboard__item__button');

    if (botao.classList.contains('dashboard__item__button--return')) {
        image.classList.remove('dashboard__item__img--rented');
        botao.classList.remove('dashboard__item__button--return');
        botao.innerHTML = "Alugar";
    } else {
        image.classList.add('dashboard__item__img--rented');
        botao.classList.add('dashboard__item__button--return');
        botao.innerHTML = "Devolver";
    }
}

O gabarito do desafio é esse:

function alterarStatus(id) {
    let gameClicado = document.getElementById(`game-${id}`);
    let imagem = gameClicado.querySelector('.dashboard__item__img');
    let botao = gameClicado.querySelector('.dashboard__item__button');
    let nomeJogo = gameClicado.querySelector('.dashboard__item__name');

    if (imagem.classList.contains('dashboard__item__img--rented')) {
        imagem.classList.remove('dashboard__item__img--rented');
        botao.classList.remove('dashboard__item__button--return');
        botao.textContent = 'Alugar';
    } else {
        imagem.classList.add('dashboard__item__img--rented');
        botao.classList.add('dashboard__item__button--return');
        botao.textContent = 'Devolver';
    }
}

Valeu!

2 respostas
solução!

Oi, Allan! Tudo bem?

Ambas as propriedades, .textContent e .innerHTML, são utilizadas para acessar ou modificar o conteúdo de texto de um elemento HTML. No entanto, elas fazem isso de maneiras distintas, o que as torna mais adequadas para diferentes situações.

.textContent

  • Essa propriedade retorna apenas o texto contido em um elemento, ignorando qualquer elemento HTML que possa estar presente dentro dele.
  • Ao definir um novo valor para .textContent, o texto é inserido como texto puro, sem interpretação de tags HTML. Ou seja, qualquer tag HTML que você inserir será tratada como texto comum.

.innerHTML

  • Essa propriedade retorna o texto e o HTML contidos em um elemento.
  • Ao definir um novo valor para .innerHTML, o texto é interpretado como HTML. Isso significa que você pode inserir tags HTML para formatar o texto, adicionar imagens, links, etc.

Exemplo prático

Imagine o seguinte trecho de HTML:

<div id="meuElemento">
  Este é um texto <strong>importante</strong>.
</div>

Se você usar .textContent para obter o conteúdo do elemento, o resultado será:

Este é um texto importante.

Perceba que a tag <strong> foi ignorada e o texto "importante" foi retornado sem formatação.

Se você usar .innerHTML, o resultado será:

Este é um texto <strong>importante</strong>

Nesse caso, a tag <strong> foi mantida e o texto "importante" foi retornado com a formatação em negrito.

Quando usar cada um?

  • .textContent: Use quando você precisa apenas do texto de um elemento, sem se preocupar com a formatação HTML. É mais seguro para inserir texto fornecido pelo usuário, pois evita a execução de scripts maliciosos que possam estar presentes em tags HTML.

  • .innerHTML: Use quando você precisa inserir ou manipular elementos HTML dentro de um elemento. É mais flexível, mas exige cuidado para evitar vulnerabilidades de segurança.

Espero ter ajudado.

Muito obrigado!