这是代码
$(function() {
if(location.hash) $("#content_inload").load(location.hash.substring(1) + ' #content_inload');
$("#nav a").click(function() {
$("#content_inload").load(this.hash.substring(1) + ' #content_inload');
});
});
出于某种原因,它会加载所有内容,但不会加载jw视频播放器。但是,如果我要求它加载整个页面而不仅仅是'#content_inload',它将加载视频,即使该页面没有头部分,没有脚本,也不会超过'#content_inload'内的内容。我只能假设JW播放器在内容顶部的底部添加了一行代码,但无法找到该行的内容。
答案 0 :(得分:1)
如果你看到jquery的源代码关于他们做的.load()
方法
...
self.html(
selector ?
// Create a dummy div to hold the results
jQuery("<div>")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(res.responseText.replace(rscript, ""))
// Locate the specified elements
.find(selector) :
// If not, just inject the full result
res.responseText
);
...
因此,如果提供了一个选择器(就像你的情况一样),他们会删除脚本以避免IE中的Permission Denied错误。
您需要使用jquery .get()
方法
类似
$("#nav a").click(function() {
$.get( this.hash.substring(1), function(response){
var dummy = $('<div>').append( response ).find('#content_inload');
$("#inload_container").html(dummy);
} );
});
另请注意,在您将#inload_container
插入其中时,我已使用#content_inload
作为目标元素,实际上是复制..
<强>更新强>
在您发表评论后,我尝试了以下有效的工作
$("#nav a").click(function() {
$.get( this.hash.substring(1), function(response){
$("#inload_container").empty().append(response).find('>*:not(#content_inload)').remove();
} );
});
在内存中的jquery对象中创建脚本元素时可能会出现问题? (无法确定原因)
在你的特定情况下,上面的解决方案是可行的,但它不是很优雅,从某种意义上说,它将从ajax调用返回的所有内容添加到DOM中,然后过滤掉我们不想要的内容。
完全改变您的实际视频页面(从ajax 加载的视频页面)并执行正常的.load()
而不过滤任何内容可能会更好..