Olá prof. André. O código buscadom.js do capítulo 10 contém um erro que, paradoxalmente, permite ao programa de funcionar corretamente. Na linha 22 aparece a instrução node = node.nextSibiling; Repare que está escrito com um "i" em excesso (Sibiling em vez do correto Sibling). Com este erro de ortografia, a instrução equivale a escrever node = undefined. Isso permite encerrar o ciclo while(node !== undefined) logo após a conclusão do eventual ciclo for dos children. Pelos meus testes, se a expressão estivesse escrita corretamente, haveria dois erros. O primeiro seria um TypeError, já que o nextSibling do último node é “null” e não “undefined” (portando, assim sendo, o ciclo while é executado e node.nodeName gera a mensagem de TypeError no console). O segundo é um erro de lógica. Não há porque invocar o nextSibling, uma vez que o próprio ciclo for se encarrega de percorrer todos os siblings filhos de um nó pai. Como a função é recursiva, os siblings de todos os níveis a partir do nó html serão percorridos por meio do ciclo for. Usar também node.nextSibling provoca redundância, de modo que os elementos são mapeados muitas vezes desnecessariamente (de forma exponencial). Além do mais, vale lembrar que nextSibling mapeia todos os nós, portanto texto e comentários também (que acabam aparecendo na estrutura do DOM apresentada no console), enquanto children considera somente os elementos (que era o objetivo do exemplo).
Olá prof. André. O código buscadom.js do capítulo 10 contém um erro que, paradoxalmente, permite ao programa de funcionar corretamente. Na linha 22 aparece a instrução node = node.nextSibiling; Repare que está escrito com um "i" em excesso (Sibiling em vez do correto Sibling). Com este erro de ortografia, a instrução equivale a escrever node = undefined. Isso permite encerrar o ciclo while(node !== undefined) logo após a conclusão do eventual ciclo for dos children. Pelos meus testes, se a expressão estivesse escrita corretamente, haveria dois erros. O primeiro seria um TypeError, já que o nextSibling do último node é “null” e não “undefined” (portando, assim sendo, o ciclo while é executado e node.nodeName gera a mensagem de TypeError no console). O segundo é um erro de lógica. Não há porque invocar o nextSibling, uma vez que o próprio ciclo for se encarrega de percorrer todos os siblings filhos de um nó pai. Como a função é recursiva, os siblings de todos os níveis a partir do nó html serão percorridos por meio do ciclo for. Usar também node.nextSibling provoca redundância, de modo que os elementos são mapeados muitas vezes desnecessariamente (de forma exponencial). Além do mais, vale lembrar que nextSibling mapeia todos os nós, portanto texto e comentários também (que acabam aparecendo na estrutura do DOM apresentada no console), enquanto children considera somente os elementos (que era o objetivo do exemplo).