Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Qual a diferença entre a propriedade nextSibling e a nextElementSibling?

Na aula 4 tem um "Para saber mais: acessando dados com propriedades no DOM" que é colocado varias propriedades, e exemplos. No entanto, no nextSibling o exemplo mostrado não funciona. Segue o exemplo: HTML

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

JS

const item1 = document.querySelector('li:first-child');
const item2 = item1.nextSibling;

console.log(item2.textContent); // Saída: "Item 2"

Nos meus arquivos HTML e JS de estudo, fiz dessa forma a princípio:

<!DOCTYPE html>
<html lang="br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Aula 04 - Atividade 05</title>
    
</head>
<body>
    <section id="secao">
        <div id="container">
            <h1>Esté é um título</h1>
            <h2>Este pode ser considerado um subtítulo</h2>
            <p>Este é um parágrafo</p>
        </div>
    </section>
    <ul>
        <li id="item1">Item 01</li>
        <li id="item2">Item 02</li>
        <li id="item3">Item 03</li>
    </ul>
    
    <script src="script.js"></script>
</body>
</html>
const item1 = document.querySelector('#item1');
const item2 = item1.nextSibling;

console.log(item2.textContent);

Ai quando coloco o nextElementSibling:

const item1 = document.querySelector('#item1');
const item2 = item1.nextElementSibling;

console.log(item2.textContent);

Ai aparece o resultado "Item 02" no console do navegador. E do jeito mostrado no "Para saber mais" utilizando somente nextSibling não retorna nada, alguém poderia me explicar o porque, ou onde posso estar errando?

1 resposta
solução!

Olá, tudo bem ?

'nextSibling' retorna o próximo objeto Node enquanto 'nextElementSibling' retorna o próximo objeto Element, então provavelmente a verdadeira questão é qual é a diferença entre um Node & um Element ?

Basicamente, um Elemento é especificado por uma Tag HTML, enquanto um Nó é qualquer Objeto no DOM, portanto, um Elemento é um Nó, mas um Nó também pode incluir Nós de Texto na forma de espaço em branco, comentários, caracteres de texto ou quebras de linha. Para obter mais informações sobre elementos vs nós, consulte esta Diferença entre o objeto Node e o objeto Element?https://stackoverflow.com/questions/9979172/difference-between-node-object-and-element-object

ou seja, pegue o seguinte trecho do DOM:
<div id="start"></div>
Me
<p>Hi</p>
Usando nextSibling você obteria:
console.log(document.getElementById('start').nextSibling); // "\nMe\n"
console.log(document.getElementById('start').nextSibling.nextSibling); // "<p>
Considerando que usando nextElementSibling você obteria:
console.log(document.getElementById('start').nextElementSibling);// "<p>"
Também nextElementSibling é IE10+, sendo o método mais recente, enquanto nextSibling tem suporte completo do navegador