使用jquery将html字符串加载到div中

Posted

技术标签:

【中文标题】使用jquery将html字符串加载到div中【英文标题】:Loading html string into div with jquery 【发布时间】:2012-07-15 12:14:33 【问题描述】:

我正在尝试将一大段 html 加载到我的 div 中,但我遇到了 html 字符串中的 javascript 仅在大约 50% 的时间加载的问题。

我知道我可以使用 jQuery: $(div).html(htmlString); 将 html 加载到必要的 div 中。导致问题的 html 是在文档就绪块中完成的,我很好奇在使用 .html(..) 时是否执行了文档就绪代码,因为页面作为一个整体已经就绪,而加载的 html 内部(主要jquery-ui js) 可能不是??

<html>
   <head>
     <script src="..../jquery-ui.min.js"></script>
     <script type="text/javascript"> $(function()   $("#tabs").tabs(); ); </script>
   </head>
   <body>
      <div>......</div>
   </body>
</html>

我已尝试在添加的 html 中应用超时以尝试为 jquery-ui 脚本添加时间来加载:

$(function()  setTimeout(function() $("#tabs").tabs(); , 300); );

但这仍然不是 100% 可靠,因为加载必要的 javascript 所需的时间可能会有所不同。有没有办法确保加载的 html 的文档就绪状态一直等到 jquery ui 脚本加载完成?

【问题讨论】:

HTML 加载时的代码在哪里?在最坏的情况下,您可以将script 移动到正文中,就在&lt;/body&gt; 结束标记之前。此外,如果元素使用 $(document).ready(function() 加载到 DOM 中,那么 $('#tabs').tabs(); 必须在 `*HTML 注入*之后* @Ohgodwhy html 仅使用 $(div).html(contents);很抱歉把它漏掉了。而且我还尝试将 【参考方案1】:

您应该始终将您的脚本和 js 文件放在正文的末尾。原因是任何放入头部的东西都必须在加载主体之前完成,因此将 javascript 放在那里通常是个坏主意。最好是安全的并将其添加到底部。

延迟也不会增加您在这里的机会。

<html>
  <head>
     <title>hey you</title>
  </head>
  <body>
    <div>......</div>
   <script src="..../jquery-ui.min.js"></script>
   <script type="text/javascript">
       $(function()  
            $("#tabs").tabs(); 
       ); 
   </script>
  </body>
</html>

【讨论】:

不,这是错误的。所有脚本都应该放在 head 部分。 使用$(document).ready(function() ); 不需要将脚本放在body 标记的末尾 - 它可以在head 已更新,为 manseUK 加油。 @LeeTaylor 需要详细说明吗?我也不同意你的观点。 @LeeTaylor 这是不正确的。脚本不需要进入标题。出于传统,它们被放入标题中。 Javascript 将在解析过程中找到的任何地方执行,无论它是否在头部。如果您查看 Twitter Bootstrap 示例,您会看到它们在页面末尾包含了他们的 javascript。这消除了对 $().ready 的需求,因为一旦解析器到达这些脚本,DOM 就已经准备好了。这样做也有性能提升。看到这个问题:***.com/questions/1213281/… 是的,这只是我的老派情怀。我已经阅读了这一点,我意识到情况不再如此(脚本的放置)。但是,应使用 onLoad() 或 $(document).ready 来保证 DOM 已准备好进行操作。【参考方案2】:

发现了问题,John Doe 在这个问题中的帖子有助于找到答案 - JavaScript Load Order。

jquery-ui.min.js 加载在 insite 脚本之后,无论它们在页面上的什么位置(在头部或&lt;/body&gt; 标记之前)。我最终做的是使用$.ui 对jquery ui 进行检查,并将async 属性添加到脚本标签

<script async src=".../jquery-ui.min.js"></script>

加载 jquery ui 后,我可以继续调用 $("#tabs).tabs();

感谢 cmets 和帖子!

【讨论】:

以上是关于使用jquery将html字符串加载到div中的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 将 HTML 页面动态加载到 div 中

jQuery从ajax加载的内容中替换字符串

无法将谷歌静态地图加载到jquery mobile中的div中

jQuery 将 div 加载到另一个没有 .html() 方法的

使用 Jquery 在单击按钮时将 PHP 文件中的 HTML 加载/预置到 div 中

使用 Jquery 加载一组图像