我在jQuery中阅读了有关.load
函数的内容。有没有办法在加载的页面中插入脚本标签?
当我尝试加载页面时,脚本无法加载:s,我想解决这个问题。并且getscript()
不是一个选项。
答案 0 :(得分:8)
当.load()
返回包含<script>
标记的HTML内容时,jQuery删除<script>
标记,移动它们, 1 执行它们,然后删除它们
虽然这使得使用调试器很难逐步执行这些脚本,但脚本执行执行。
1 无论是<head>
还是最父元素 - 我还没有找到关于此的权威来源,尽管我可以查看jQuery源代码。 子>
答案 1 :(得分:1)
而不是使用$(el).load我做了$ .get,解析了结果en ev(i)lled;)脚本
为了便于阅读和理解,我尝试使用反映其目的的变量名并简化了很多。当然,这里应该有一些错误处理,但它只是一个POC。 HTH某人:)
低于* le code
var ajax_url = "mypage.htm";
var result_selector_filter = "#mynewcontent";
var element_to_update = $("#mycontent");
// below the statement that you'ld normally use
// element_to_update.load(ajax_url + ' ' + result_selector_filter);
$.get(ajax_url, function(response){
// parse the entire response into a jQuery object
var initial_parsed_result = $(response);
// find the selector that needed to be filtered
var result_node = initial_parsed_result.find(result_selector_filter);
// update the html
element_to_update.html(result_node.html());
// variables used while looping
var current_node,i;
// Loop the parsed result jQuery object, check if it's a script tag and evaluate it
for(i=0;i<initial_parsed_result.length;i++){
// create a jquery object for current looped result html
current_node = $(initial_parsed_result.get(i));
// check if current node is a script tag
// method always returns the tagname in CAPITALS
if(current_node.prop("tagName")=="SCRIPT") {
eval(current_node.html());
}
}
});