我有一個基於jQuery的「ajax引擎」。接收到響應後,我必須在插入頁面之前操作響應。但我需要將響應作爲一個jQuery對象。 我這樣做有:阻止在jQuery中加載(或解析)腳本執行
tmpActualResult = $('<span/>').html(actualResult);
而此時的jQuery(或瀏覽器本身?)執行,其包括在響應腳本 - 而正是這一點不應該發生。稍後我將執行腳本手冊。
特別我將:
- 解析響應(可以訪問所包含的標籤/元素)
- 插入元素融入到網頁(DOM操縱)
- 執行可能的腳本(這是收)
編輯: 如果有人也感興趣,我已經通過擴展jQuery.domManip函數創建了一個更通用的解決方案,如第一個答案中的建議。
(function($, oldDomManip) {
// Override the core domManip function
$.fn.domManip = function() {
function evalScript(i, elem) {
jQuery.globalEval(elem.text || elem.textContent || elem.innerHTML || "");
}
var scripts = [];
// let jQuery build the fragments
var results = jQuery.buildFragment(arguments[0], this, scripts);
// change parameter to created fragments
arguments[0] = results.fragment.childNodes;
// do what jQuery will do - without scripts
oldDomManip.apply(this, arguments);
if (scripts.length) {
// if connection is active
if (jQuery.active != 0) {
$(this).bind("ajaxStop.scriptCache", function() {
$.each(scripts, evalScript);
$(this).unbind("ajaxStop.scriptCache");
});
} else
$.each(scripts, evalScript);
}
return this;
};
})(jQuery, jQuery.fn.domManip);
在ajax請求完成之前它不會執行腳本。爲我工作。
究竟是什麼反應? –
此時一個簡單的HTML字符串。 (有可能的腳本標籤) – chuem