脚本被jQuery .load剥离

时间:2011-12-18 05:41:05

标签: php javascript jquery html load

我认为之前没有提出这个问题,至少不是我需要回答的问题。我正在使用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之前,是否有任何解决方法可以删除脚本?我能以某种方式手动加载它们吗?任何微小的例子对我都有帮助。

1 个答案:

答案 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端点,只返回您要求的数据。否则,事情就会变得具体,甚至是棘手的。

更多评论而非真实答案。