我有一个基于jQuery的“ajax引擎”。收到响应后,我必须在插入页面之前操纵响应。但我需要将响应作为jQuery对象。 我这样做:
tmpActualResult = $( '<span/>' ).html( actualResult );
但是此时jQuery(或浏览器本身?)执行包含在响应中的脚本 - 确实不会发生这种情况。我稍后会执行脚本手册。
特别是我会:
谢谢
编辑: 如果有人也有兴趣,我已经通过扩展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请求完成之前,它不会执行脚本。为我工作。
答案 0 :(得分:4)
您无法阻止脚本执行脚本,这些脚本是您尝试使用.html()或.append()添加的标记字符串的一部分。至少没有扩展jQuery的domManip功能。它会使用.html()或.append()提取您尝试添加的html标记中的所有脚本,并对其进行描述。
但是,您可以自己从字符串中提取内部文本(js)的脚本标记,仅通过.html()或.append()添加标记,然后在需要时自行评估脚本。 / p>
答案 1 :(得分:1)
试试这个:
var container = document.createElement('div');
container.innerHTML = "<div> i am html with script tag <script type="text/javascript">alert('Script executed');</script>end</div>"
$(container).doSomething()