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

document.querySelector vs $

Na aula de Javascript aprendemos a utilizar o document.querySelector para associar o texto de uma tag a uma variável e a cada alteração dessa variável, se refletia também no DOM. Por exemplo:

<span id="span-teste"></span>
<script>
    var span = document.querySelector("#span-teste").textContent;
</script>

Se eu alterar o valor da variável span, isso se refletirá no DOM automaticamente.

Entretanto, o mesmo não acontece no jQuery. Nessa aula, temos um span com id "tempo-digitacao" e foi dada essa solução:

var tempoRestante = $("#tempo-digitacao").text();
setInterval(function() {
        tempoRestante--;
        $("#tempo-digitacao").text(tempoRestante);
    },1000);

Não entendi porque o DOM não refletiu a mudança automática do tempoRestante (como era feito no javascript simples) e foi necessário chamar de novo o #tempo-digitacao para alterar seu texto.

7 respostas
solução!

Boa tarde, Maurício! Como vai?

Isso ocorre pq a variável tempoRestante armazena apenas o texto do elemento cujo ID é tempo-digitacao. Veja na linha a seguir:

var tempoRestante = $("#tempo-digitacao").text();

Por isso, em seguida, é necessário selecionar novamente o elemento fazendo $("#tempo-digitacao").

Pegou a ideia? Qualquer coisa é só falar!

Um excelente ano de 2019, com muitos estudos e sucesso pra vc!

Grande abraço, meu aluno!

Mas não é o mesmo caso do document.querySelector que pega somente o textcontent?

Repare que o querySelector() retorna um elemento HTML! Portanto:

var conteudoTextual = document.querySelector("#span-teste").textContent;

É equivalente a

var conteudoTextual = $("#span-teste").text();

No primeiro exemplo que você deu, se eu fizer:

var conteudoTextual = document.querySelector("#span-teste").textContent;
conteudoTextual = banana;

A página irá exibir banana no lugar do texto que antes estava o span.

Agora, se eu fizer:

var conteudoTextual = $("#span-teste").text();
conteudoTextual = banana;

Nada muda na exibição da página. Então não são equivalentes, certo?

Maurício, pra exemplificar o comportamento que eu expliquei anteriormente, fiz um pequeno código que vc pode acessar nesse link! Veja que o comportamento que ocorre na prática é exatamente como o explicado por mim! Tanto é verdade que ao clicar no botão 1 nada ocorre em ambos os casos e ao clicar no botão 2 ambos os spans tem seus textos alterados.

Ok, ficou claro agora! Realmente, teve uma diferença no curso de Javascript, onde utilizamos o seguinte código:

var titulo = document.querySelector(".titulo");
titulo.textContent = "Aparecida Nutricionista";

No caso do exemplo acima, o título (uma classe de h1) é alterado para "Aparecida Nutricionista", mas se eu tirar o ".textContent" da 2a linha e jogar para a primeira, o h1 não é alterado...

É isso aí, Maurício! Sempre que tiver qualquer dúvida é só mandar aqui no fórum!

Grande abraço e bons estudos, meu aluno!