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

173
Visualizações
jquery agregue y ejecute la etiqueta <script> VS js vanilla

Estoy actualizando mi aplicación y he decidido usar bootstrap 5 que ya no tiene la dependencia de jquery y eliminar esta dependencia de mi aplicación también.

Así que estoy reescribiendo la parte de javscript de jquery a js vanilla.

Utilizo mucho AJAX para cargar contenido en diferentes divs y para su posterior manipulación en base a ciertos eventos desencadenados por el usuario. Desafortunadamente, en algunos casos me veo obligado a colgar una etiqueta de script junto con la parte html para ejecutar una función javascript que no puedo ejecutar de otra manera.

Por ejemplo:

 <script>myFuncrion(val1, val2, val3);</script> <div id="myDiv"> <div>Other html code ..</div> </div>

Con jquery, algo como esto fue suficiente para agregar el marcado a un div dado y ejecutar la función javascipt

 $('#elementToAppend').append(html);

Convirtiendo esto a vanilla js obtengo algo como esto

 document.getElementById('elementToAppend').innerHTML = html;

Todo está correctamente anexado, pero obviamente no se ejecuta el js

No sé jquery detrás de escena, pero supongo que está siendo manipulado de alguna manera para que se ejecute la parte de javascript.

Luego creé una función que haría que todo volviera a funcionar

 const functionOne = (elem) => { // I make the AJAX call... let jsAndData = getJsAndData(data); // Append the html string document.querySelector(elem).innerHTML = jsAndData.cleanData; // I run the js eval(jsAndData.js); } const getJsAndData = data => { var js = ""; // Check if there is a <script> tag let script = data.match(/<script>(.*?)<\/script>/g); // If there is a script tag I extrapolate the js content if (script) { script.map(val => { js = val.replace(/<\/?script>/g, ""); }); // I remove the <script> tag and its content from the html string let cleanData = data.replace(/<script[^>]*>.*<\/script>/gm, ""); return { cleanData: cleanData, js: js }; } else { return { cleanData: data, js: js }; } };

De esta manera obtengo el mismo resultado que tenía con jquery, incluso mejor, porque en el DOM ya no hay rastro de la etiqueta del script.

Ahora, mis preguntas son:

  1. ¿Estoy haciendo las cosas bien?
  2. ¿Hay una mejor manera de hacer esto?
  3. ¿Estoy completamente fuera del camino?
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Tu camino es un camino correcto. Por razones de seguridad (XSS), la etiqueta del script no se ejecuta cuando se usa innerHTML.

https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#security_considerations

Alternativa: en MDN puedes encontrar código hacky como este para trabajar desde el backend sin tocar el frontend. Yo no recomendaría de esta manera.

 const name = "<img src='x' onerror='alert(1)'>"; el.innerHTML = name; // shows the alert
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