jquery用div中的js标签加载html

时间:2016-08-26 17:17:07

标签: jquery html ajax

问题:

我想使用jquery在div内部通过ajax加载外部html.Its非常简单。但在我的情况下,htmls可以有很多脚本和css标签,并且只要加载html就会触发$.ajax().done()事件,但它不会等待标记完成加载,因此依赖于这些标记的js代码会失败。

目的:

此问题的

目的是要知道是否有event可用于了解html及其标记在这种情况下何时完全加载。

注意下面的示例是解释我的问题的示例。 请不要建议将jquery-ui移动到索引,因为这只是为了说明我的问题。 你可以在index.html TypeError: $(...).draggable is not a function运行<!doctype html> <html> <head> <meta charset="utf-8"> <title>Load remote content into object element</title> <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> </head> <body> <div id="siteloader">loading ...</div>​ <script> $(function() { $.ajax({ type: 'GET', dataType: 'html', url: 'dynamic.html' }).done(function(html) { $("#siteloader") .html(html); //draggable fails here $("#draggable").draggable(); }); }); </script> </body> </html> 时看到控制台上的错误,因为jquery ui仍在后台加载。

的index.html:

<h1>Dynamic HTML</h1>
<h2>with big js css files</h2>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">

<style>
    .demo-description {
        clear: both;
        padding: 12px;
    }
    .ui-draggable,
    .ui-droppable {
        background-position: top;
    }
    #draggable {
        width: 150px;
        height: 150px;
        padding: 0.5em;
    }
</style>

<div id="draggable" class="ui-widget-content">
    <p>Drag me around</p>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.2.2/d3.js" type="text/javascript">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.5/ace.js" type="text/javascript">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.18.2/codemirror.js" type="text/javascript">
</script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js" type="text/javascript">
</script>
<script>
    $(function() {
        console.log('Dynamic html loaded');

    });
</script>

dynamic.html:

{{1}}

1 个答案:

答案 0 :(得分:0)

在您的第一页(从您调用ajax的地方)加载jquery ui

<head>
    <meta charset="utf-8">
    <title>Load remote content into object element</title>
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
     // load jquery ui here
     <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js" type="text/javascript"></script> 
 </head>
  .....

因为作为DOM文本插入的JavaScript将不会执行。 draggable()正在加载dynamic.html(jquery ui),而您在index.html中使用draggable()并没有draggable()功能。您可以在index.html中加载所有必需的j,或者另一种方法是在dynamic.html中调用{{1}}。我宁愿先去。

如果您必须执行脚本,那么您可以查看$.getScript()