Script Выполнение - innerHTML, jQuery html()

document.body.innerHTML = ""
$("body").html("")

innerHTML не выполняется.

Выполняется

jQuery html().

Почему так?

3 ответа

Не вдаваясь в теоретические вопросы о том, почему jQuery решил сделать это, jQuery html() ведет себя иначе, чем нативный innerHTML. По умолчанию jQuery найдет теги script в HTML и загрузит асинхронно. Если это поведение нежелательно, вы можете использовать $.parseHTML, чтобы это не происходило, установив третий аргумент на false.

$("body").empty().append($.parseHTML("", document, false));

Обратите внимание, что теги script не будут добавлены в DOM с помощью этого метода.

И наоборот, если вы хотите добиться того же эффекта, что и ваш оператор jQuery в vanilla JS, вы можете сделать следующее.

var script = document.createElement('script');
script.text = 'alert(11);';
document.body.innerHTML = '';
document.body.appendChild(script);


Использование innerHTML остановит выполнение script в соответствии с документацией простыми словами, не вдаваясь в подробности.


Попробуйте это...

var x = document.createElement('script');
var y = document.getElementsByTagName('script')[0];
x.text = "alert(11);"
y.parentNode.insertBefore(x, y);

licensed under cc by-sa 3.0 with attribution.