jQuery:在脚本插入时调用globalEval

时间:2014-09-12 16:11:27

标签: javascript jquery

我将这个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中。

1 个答案:

答案 0 :(得分:2)

  

当插入dom时,为什么浏览器本身不应该按原样处理执行?为什么jQuery执行这段代码?

因为当您通过innerHTML插入DOM时,浏览器不会执行script个元素。因此,经常需要人们真正想要的东西,jQuery会为你做这件事。