我将这个html片段插入到dom中,使用jQuery(" body")。append(elementBelow):
<div>...</div>
<script type="...">
// and this is being executed through jQuery.globalEval()
</script>
当插入dom时,为什么浏览器本身不应该按原样处理执行?为什么jQuery执行这段代码?
如果jQuery正在执行此操作,为什么在添加到dom时也不会执行此代码?间接方法eval是globalEvent方法中使用的方法:
// Evaluates a script in a global context
globalEval: function( code ) {
var script,
indirect = eval;
code = jQuery.trim( code );
if ( code ) {
// If the code includes a valid, prologue position
// strict mode pragma, execute code by injecting a
// script tag into the document.
if ( code.indexOf("use strict") === 1 ) {
script = document.createElement("script");
script.text = code;
document.head.appendChild( script ).parentNode.removeChild( script );
} else {
// Otherwise, avoid the DOM node creation, insertion
// and removal by using an indirect global eval
// !!!!!!!!!!! ENDING UP HERE HERE!!!!!!!!
indirect( code );
}
}
},
我只是想了解这一切是如何工作的,因为它正在被eval:ed并插入到dom中。
答案 0 :(得分:2)
当插入dom时,为什么浏览器本身不应该按原样处理执行?为什么jQuery执行这段代码?
因为当您通过innerHTML
插入DOM时,浏览器不会执行script
个元素。因此,经常需要人们真正想要的东西,jQuery会为你做这件事。