我已經插入到DOM這個網站片,使用jQuery(「身體」)追加(elementBelow):jQuery的:globalEval正在呼籲腳本插入
<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:編輯和插入DOM。
我不確定我是否理解這個問題。你在問爲什麼jQuery會對腳本進行處理,即使瀏覽器將其添加到DOM中也會對其進行評估嗎? – 2014-09-12 16:20:04
@FelixKling是的,有點。但是由於某些原因,儘管被添加到dom中,代碼並沒有運行兩次。 – momomo 2014-09-12 16:47:19
我相信因爲https://github.com/jquery/jquery/blob/master/src/manipulation.js#L60-L75,這裏應用:https://github.com/jquery/jquery/blob/master/ SRC/manipulation.js#L504。 'type'屬性被臨時改變,以致'script'元素不被解釋。 – 2014-09-12 16:49:25