【问题标题】:why does jquery's .load() ignore <script>?为什么 jquery 的 .load() 会忽略 <script>?
【发布时间】:2017-05-01 20:43:16
【问题描述】:

我有一个常见的页面 a.html,如下所示:

<html>
  <head>
    <script type="text/javascript" src="xyz.js" > </script>
  </head>
  <body>
    <div> ... </div>
  </body>
</html>

在 b.html 中,我将 jquery 的 .load() 函数用于 div

$("#myDiv").load("a.html")  

它有效。 xyz.js 的内容与 a.html 一起加载。但是为什么没有&lt;script&gt; 标签呢?我打开萤火虫查看源代码。有a但没有a&lt;script&gt;

我想要&lt;script&gt;,因为我需要它来查找相对路径。 (this question)

编辑:我尝试使用.get().html()。没有帮助。

Edit2:标题不太合适。 xyz.js 运行。但是没有&lt;script&gt;

【问题讨论】:

标签: javascript jquery


【解决方案1】:

.load() 函数有目的地从加载的内容中去除&lt;script&gt; 标记。当你给它一个普通的 URL 来加载时,它会在加载内容并将其添加到 DOM 后执行脚本。但是,如果您使用在第一个参数中的 URL 之后添加选择器的技巧:

$('#foo').load("http://some.domain.com/blah #special-div");

然后它会去除&lt;script&gt; 标签,但它会执行它们。

为什么?我不知道。

现在,请注意,将整个页面从 &lt;html&gt; 标记向下加载到另一个页面的元素中会导致某种 DOM 的科学怪人怪物,如果浏览器会这样做的话。通常,当您使用“.load()”获取内容片段来更新页面时,您的服务器应该响应页面的一部分,而不是整个页面。 jQuery 处理在实际 URL 之后允许使用选择器的目的是让您删除页面的一部分,这确实很酷,但它的缺点是在这种情况下不会执行脚本。

【讨论】:

  • 最后我决定使用 iframe。谢谢你的回答。
【解决方案2】:

因为它无法运行&lt;SCRIPT&gt; 标签内的脚本。 jQuery 有 .getScript() 只调用脚本。 Check here

【讨论】:

  • 您不必运行脚本;考虑下划线模板等具有特殊类型的脚本以避免解析的情况。
猜你喜欢
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多