Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

378
Visualizações
¿Cómo puedo acceder a los elementos cuando uso *csi.min.js* en JavaScript?

Quiero animar mi barra de navegación usando JavaScript. Creé un navbar.html separado y lo incluí usandocsi.min.js. Cuando intento getElementById mi barra de navegación, mostrar y ocultar el botón. devuelve nulo y cuando lo prueba en la consola de desarrollo funciona.

barra de navegación.html:

 <nav> <div class="site-mobile-menu collapse navbar-collapse show" id="main-navbar"> navbar content </div> <nav>

índice.html:

 <div data-include="/src/navbar.html"></div> <script src="/src/js/navbar.js"></script>

barra de navegación.js:

 window.addEventListener("load", function() { // debugger; var mobNav = document.getElementById("main-navbar"); var showNavBtn = document.querySelector("#show-nav"); var hideNavBtn = document.getElementById("hide-nav"); console.log(mobNav + " " + showNavBtn + " " + hideNavBtn); if (!mobNav == null || !showNavBtn == null || !hideNavBtn == null) { showNavBtn.onclick = function() { console.log("clicked"); mobNav.classList.add("nav-shown"); } } else { console.log("Error Opening Mobile Navbar"); } }, false);
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Cuando se load la ventana, los elementos como #main-navbar no están en el DOM, csi los agrega más tarde.

Idealmente, csi daría una opción para notificar cuando se carga un elemento [data-include] pero no lo hace. Puedo sugerir 2 formas:

Reimplementación de csi

 // this is csi re-implementation function fetchTemplates() { return Promise.all( [...document.querySelectorAll('[data-include]')].map(async el => { const response = await fetch(el.getAttribute('data-include')); const html = await response.text(); el.outerHTML = html; })); } // now you can call fetchTemplates and wait for it to done (async () => { await fetchTemplates() console.log('templates are loaded. you can now find #main-navbar'); console.log(document.querySelector('#main-navbar')); })();

https://codesandbox.io/s/zealous-jepsen-12ihl?file=/re-implement-csi.html

Use MutationObserver para detectar cuándo csi reemplaza el elemento con el contenido obtenido.

 const div = document.querySelector('[data-include="/src/navbar.html"]'); const observer = new MutationObserver(function (mutationsList, observer) { const templates = document.querySelectorAll('[data-include]'); if (templates.length === 0) { console.log('all templates loaded, now you can find #main-navbar'); console.log(document.querySelector('#main-navbar')); } // we no longer should observe the div observer.disconnect(); }); observer.observe(div.parentElement, { childList: true, });

https://codesandbox.io/s/zealous-jepsen-12ihl?file=/index.html

Personalmente recomiendo la primera opción porque

  • Es un paquete muy antiguo implementado con una API muy antigua ( XMLHttpRequest ).
  • Si hay muchos elementos html en el DOM de su sitio, podría afectar el rendimiento.
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda