3
respostas

Dúvida sobre alocar um valor com .textContent

Olá!

Explorando um pouco o JavaScript (estou no final da seção 2 do curso), percebi que quando eu tento alterar o valor de uma variável que eu aloquei com um objeto do HTML, eu consigo fazer apenas se eu não usei o .textContent direto.

Exemplo:

Caso 1:

tdImc = paciente.querySelector("info-imc");
...
tdImc.textContent = imc;

Caso 2:

imc_html = paciente.querySelector("info-imc").textContent;
...
imc_html = imc;

Examinando no Console, eu percebo que em ambos os casos ele modificou a variável, mas apenas no Caso 1 ele muda o valor no HTML.

Por que isso acontece?

3 respostas

Olá Daniel!

Não é exatamente dessa forma que acontece mas vou tentar abstrair usando Orientação a Objetos ok?

Como não sei se você conhece esse paradigma irei explicar.

Imagine que um objeto é um tipo de elemento que possui suas caracteristicas (atributos) e suas ações (funções);

Por exemplo:

Caneta:

Atributos: Cor, Tamanho;

Funções: escrever(), tirarTampa, colocarTampa(), textContent();

Se quisermos saber a cor da caneta usamos: Caneta.getCor(), se quisermos escrever com ela fazermos Caneta.escrever(); se quisermos saber o que foi escrito usamos o Caneta.textContent();

Reparou que o textContent() acessa um atributo do objeto?

Logo, quando fazemos isso:

tdImc = paciente.querySelector("info-imc");

É como se tivessemos criando um objeto, uma referencia, um link entre tdImc com o seletor info-imc.

Quando fazemos isso:

tdImc.textContent = imc;

Estamos pegando o texto dessa referencia e alterando para o que está dentro de imc.

Logo faz sentido ele atualizar, pois é como um link.

Já quando fazemos isso:

imc_html = paciente.querySelector("info-imc").textContent;

Estamos pegando o atributo e não a referencia.

Logo dentro do imc_html não temos um objeto/um link/uma referencia, temos um texto puro e se mudarmos ele nada irá alterar no seu HTML.

Não sei se ficou confuso. Espero que tenha entendido!

Qualquer coisa me fala viu?

Bons estudos! ^^

Entendi sim! Você deixa de instanciar objeto e modificar um atributo dele (caso 1) para "copiar" (unwrap) o valor do atributo para a variável (caso 2).

Muito obrigado pela resposta.

Você comentou que não era exatamente dessa forma que acontecia debaixo dos panos. Como que seria a explicação exata então? Ponteiros?

Só para que você saiba em que ponto eu estou (e o nível técnico da resposta), eu já programei bastante em Python, C e C++ na faculdade e estou aqui pra aprender novas linguagens.

Sei que aqui geralmente as perguntas são mais simples e práticas, mas eu não consegui achar uma resposta mais completa nem no StackOverflow, nem no W3Schools.

Opa Daniel!

Encontrei um artigo que fala justamente sobre isso:

https://tableless.com.br/entendendo-o-dom-document-object-model/

Espero que te ajude! ^^