Javascript 通过AJAX导航并插入一个div,使用JQuery执行包含的脚本

Javascript 通过AJAX导航并插入一个div,使用JQuery执行包含的脚本,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我想实现一个基于AJAX的导航,当JS不可用时,它会优雅地后退,并希望在现有页面的基础上进行导航。 为了实现这一点,我将添加一个“容器”分区,其中: 标记页面中需要替换的部分 包含需要插入页面的所有脚本 我想做的基本上是使用AJAX来: 替换div#main的内容 替换div后,执行div#main中包含的所有脚本 不要使用AJAX执行页面下载中包含的其他脚本 基本上是这样的: <html> ... menu, navigation, borders, social e

我想实现一个基于AJAX的导航,当JS不可用时,它会优雅地后退,并希望在现有页面的基础上进行导航。 为了实现这一点,我将添加一个“容器”分区,其中:

  • 标记页面中需要替换的部分
  • 包含需要插入页面的所有脚本
我想做的基本上是使用AJAX来:

  • 替换div#main的内容
  • 替换div后,执行div#main中包含的所有脚本
  • 不要使用AJAX执行页面下载中包含的其他脚本
基本上是这样的:

<html>
   ... menu, navigation, borders, social etc...
   ... come scripts which must NOT be executed when using AJAX page load ...
   <div id="main">
      ... main HTML which needs to be replaced in page ...
      <script> ... scripts which need to be executed ... </script>
   </div>
   ... footer, copyright, links etc...
</html>
因为CSS选择器将导致过滤掉所有脚本。因此,我尝试使用$.ajax并处理下面的代码

$.ajax($(this).attr('href')).done(函数(数据){
$('#main')。替换为($(数据)。查找('#main');/.1
$(数据).find('#main').filter(“脚本”).each(函数(){
eval($(this.text());/.2
警报($(this.text());/.2
});
})
这也不起作用

  • .1将插入主DIV,但不会插入任何脚本
  • .2将永远不会被执行
据我所知,$(数据)不应该过滤掉脚本,但事实证明这是行不通的

到目前为止,我唯一的解决方案(或者我们应该称之为变通方法?)是使用基于regex的“数据”字符串解析,但我真的不喜欢这样,我想要一个更健壮、基于标准的解决方案

注意:现有环境使用JQuery 1.7,但我相信我们可以轻松升级


p.p.S.:我理解上述内容仅适用于链接,不适用于表单,但这对于我的用例来说已经足够了

如果加载页面上已经存在的脚本,会发生什么?@madalinivascu我理解其含义,不希望发生这种情况。这就是为什么我们将所有需要在同一个div#main中运行的脚本都放在同一个div#main中,你的页眉不一样吗?@madalinivascu div#main之外的所有内容都是一样的,这就是为什么我只想替换div#main并保留所有页面重新呈现和外部脚本重新执行的原因。请阅读这篇文章3次,但没有得到您想要达到的效果。是否要动态加载一组脚本并执行它们?如果是这种情况,您可以使用
jQuery.getScript()
,或者使用创建
节点的方法,例如如下所示: