当load()
与片段选择器一起使用时,脚本元素将在添加片段之前被剥离,因此脚本将不会执行。
当使用不带后缀选择器表达式的URL调用.load()时,将在删除脚本之前将内容传递给.html()。这将在脚本块被丢弃之前执行它们。但是,如果使用附加到URL的选择器表达式调用.load(),则会在更新DOM之前删除脚本,因此不会执行这些脚本。两种情况的示例如下所示:
所以尝试
$.get('partial.html', function(result){ $result = $(result); $result.find('#content').appendTo('#new_content'); $result.find('script').appendTo('#new_content'); }, 'html');
@H_404_11@解决方法
我尝试使用
.load()
和$.ajax
获取一些需要附加到容器的HTML,但是当我将其附加到元素时,返回的HTML中的Javascript不会被执行。使用
.load()
:$('#new_content').load(url+' #content > *',function() { alert('returned'); });
我也尝试过切换到$
.ajax呼叫。然后,我从返回的HTML中提取了脚本,之后将其附加到了容器中,但是同样的问题,在这种情况下,JS没有被执行,甚至没有附加,据我所知,试图将a附加<script>
到DOM元素像这样皱眉吗?使用
$.ajax
:$.ajax({ url: url }).done(function(response) { var source = $("<div>").html(response).find('#overview_script').html(); var content = $("<div>").html(response).find('#content').html(); $('#new_content').html(content); $('<script>').appendTo('#new_content').text(source).html(); });
理想情况下,在附加HTML之后,我将在回调中运行此javascript,但是将变量设置为从控制器返回的值。
因此,总而言之,我正在尝试获取一些包含JS的HTML,该HTML必须在添加了HTML之后运行,但是我没有运气,
.load()
或者$.ajax()
由于返回HTML中的脚本在添加后消失了,或者它确实根本不执行。
$('#new_content').load(url+' #content > *',function() {
alert('returned');
});
$.ajax({ url: url }).done(function(response) {
var source = $("<div>").html(response).find('#overview_script').html();
var content = $("<div>").html(response).find('#content').html();
$('#new_content').html(content);
$('<script>').appendTo('#new_content').text(source).html();
});
我尝试使用.load()
和$.ajax
获取一些需要附加到容器的HTML,但是当我将其附加到元素时,返回的HTML中的Javascript不会被执行。
使用.load()
:
我也尝试过切换到$
.ajax呼叫。然后,我从返回的HTML中提取了脚本,之后将其附加到了容器中,但是同样的问题,在这种情况下,JS没有被执行,甚至没有附加,据我所知,试图将a附加<script>
到DOM元素像这样皱眉吗?
使用$.ajax
:
理想情况下,在附加HTML之后,我将在回调中运行此javascript,但是将变量设置为从控制器返回的值。
因此,总而言之,我正在尝试获取一些包含JS的HTML,该HTML必须在添加了HTML之后运行,但是我没有运气,.load()
或者$.ajax()
由于返回HTML中的脚本在添加后消失了,或者它确实根本不执行。