La fonction .html() permet d'ajouter du contenu HTML et d'exécuter des balises <script>.
Les balises scripts semblent être exécutées après l'ajout du HTML. On pourrait donc penser que html() fait quelques choses qui ressemble à ceci:
function html(str) {
this.innerHTML = str;
var scriptElements = this.getElementsByTagName('script');
Array.forEach(scriptElements, function(el) {
if (el.src && el.src !== '') {
// récupérer et exécuter le fichier
} else {
eval(el.textContent); // eval ou new Function()
}
});
}
Voici un exemple qui prouve que l'exécution est fait par la suite:
var tag = 'a';
$(document.body).html('<script>console.log(document.getElementsByTagName("'+tag+'").length)<\/script>
<'+tag+'>test<\/'+tag+'>
<'+tag+'>test<\/'+tag+'>');
// affiche 2 même si le script est avant les deux tags.