我认为之前没有提出这个问题,至少不是我需要回答的问题。我正在使用jQuery的.load函数。我只是在加载页面片段时遇到问题。
使用以下内容时:
$('#content').load('loadTest.html');
loadTest.html上的所有脚本都加载得很好。但是,在加载像这样的页面片段时:
$('#content').load('loadTest.html #content');
在更新DOM之前删除脚本
http://api.jquery.com/load/中明确记录了这一点:
注意: 使用不带后缀选择器表达式的URL调用.load()时,会在删除脚本之前将内容传递给.html()。这将在丢弃之前执行脚本块。但是,如果使用附加到URL的选择器表达式调用.load(),则在更新DOM之前会删除脚本,这就是它们永远不会被执行的原因。两种情况的示例如下所示:
我知道我可以在外部加载可以在任何地方使用的脚本,但问题是,我正在使用页面范围的ajax系统,其中所有内容都是动态加载的。所以我真的不喜欢在外部文件中使用我将要编写的每个javascript函数(此时为100)。特别是因为其中一些javascript函数是从数据库加载的值生成的,我无法在.js文件中考虑这些函数。
在更新DOM之前,是否有任何解决方法可以删除脚本?我能以某种方式手动加载它们吗?任何微小的例子对我都有帮助。
答案 0 :(得分:0)
在您发表评论之后,我认为您可能对js/css lazyload之类的内容感兴趣。它有条件地加载脚本,我在一些较小的站点上使用它来加载脚本和CSS,当我需要它们在不同的子页面或用户交互时。
你在头上加载一次:
<script src="js/lazyload-min.js" type="text/javascript"></script>
然后您可以动态地加载脚本,这是众多示例中的一个:
// Load a single JavaScript file and execute a callback when it finishes.
LazyLoad.js('http://example.com/foo.js', function () {
alert('foo.js has been loaded');
});
也适用于CSS文件。
这可能对您的情况有所帮助,但是,它也可能会改变您的加载逻辑。在任何情况下,我认为您的服务器上应该有多个AJAX端点,只返回您要求的数据。否则,事情就会变得具体,甚至是棘手的。
更多评论而非真实答案。