1
resposta

[Dúvida] Posso usar .children.length ?

Quais são os problemas que pode haver no meu código dessa maneira?

import { newListItem } from "./scripts/newListItem.js";
import { momentRegister } from "./scripts/momentRegister.js";
import verifyEmptyList from "./scripts/verifyEmptyList.js";

const inputItem = document.getElementById("input-item")  //ONde o novo item será digitado.
const shopList = document.getElementById("lista-de-compras");
const addButton = document.getElementById("adicionar-item");
let itemList = document.getElementById("lista-de-compras");
let counter = 0;

//No addEventListener(), 1º parâmetro é evento, 2º, funcionalidade.
addButton.addEventListener("click", (event) => {  //arrow function
    //console.log(evento);  //Mostrará muitas funcionalidades através de evento.

    const listItem = newListItem(event, counter)
    shopList.appendChild(listItem);  //Inserindo enfim o item novo dentro da lista existente

    const registeringMoment = momentRegister()

    //console.log(dataCompleta); //debug
    shopList.appendChild(registeringMoment);  //Inserindo o momento do registro da data de anotação.
    verifyEmptyList(itemList);
})

inputItem.addEventListener('keydown', (event) => {
    if (event.key === 'Enter') {
        addButton.click();
        event.preventDefault();
    }
})

verifyEmptyList(itemList);
let initialText = document.getElementById("initial_text");
//let itemList = document.getElementById("lista-de-compras");

export function verifyEmptyList(itemList) {
    //console.log('itemList', itemList);
    const quantityItems = itemList.children.length;
    if (quantityItems > 0) {
        initialText.style.display = 'none';
        //document.getElementById("initial_text").remove()  //Como eu fiz antes.
    } else {
        initialText.style.display = 'block';
    }
}

export default verifyEmptyList;
1 resposta

Oi, tudo bem?

Você pode usar .children.length sim, mas vale ficar de olho em um detalhe: ele conta todos os elementos filhos, sem diferenciar o que é realmente um item de compra. No seu código, como você também adiciona o registeringMoment na lista, a contagem nunca vai chegar a zero, e aí a mensagem de lista vazia não aparece.

Para evitar isso, dá pra contar só os itens que interessam. Se, por exemplo, cada item de compra for um <li>, você pode fazer assim:

export function verifyEmptyList(itemList) {
    const quantityItems = itemList.querySelectorAll("li").length;

    if (quantityItems > 0) {
        initialText.style.display = 'none';
    } else {
        initialText.style.display = 'block';
    }
}

Assim você garante que está olhando apenas para os itens reais e não para outros elementos extras. Fica mais confiável e o comportamento da função bate direitinho com o esperado.

Bons estudos ✨

Espero ter ajudado! Bons estudos!

Sucesso

Imagem da comunidade