2016-07-27 63 views
-1

我有一个页面使用ID在同一个域上呈现来自另一个页面的HTML块。我当前的代码:在DOM就绪之前使用jQuery加载函数

<div id=”testdiv”></div> 
<script> 
jQuery(document).ready(function(){ 
    jQuery('#testdiv').load('/references/embed1.html #testdiv2'); 
}); 
</script> 

虽然这正确加载内容,还有就是对网页加载和jQuery的内容加载之间的可见滞后;取决于DIV的内容,它有时会显示一秒钟,然后弹出到位。这显然是由于该页面在DOM Ready之前不会尝试检索HTML内容,所以我删除了ready函数,但Load函数不运行。如果我使用iFrame,它会在浏览器执行代码时加载,但我失去了仅包含特定DIV ID的功能,并且很难使其响应。看着$ .ajax,但显然Load使用.ajax,所以它看起来不会有什么区别。

简单地说 - 如何从另一个页面加载特定的DIV ID而无需等待DOM Ready是否使用jQuery,JavaScript,iFrames或其他方法?第二个问题

感谢

+0

简单...删除'jQuery的(文件)。就绪(函数(){',它应该能正常运行*如果你的代码是** **正是因为它是在你的问题*。但请注意,但可能仍然有一个延迟,你不能删除,而不是删除需要使用Ajax来获得这个内容的第一个地方。 –

+0

为什么投票表决? dom准备好了并不适用于我。此外,这篇文章http://stackoverflow.com/questions/15107074/jquery-load-not-working指出了同样的问题,并且解决方法是DOM准备好了。 – user1754738

+1

它应该工作正常。如果没有,这意味着您的问题中的示例与您实际使用的代码不匹配。脚本相对于dom元素的位置非常重要。 –

回答

-4

Ajax不是即时的,你做什么都改变这种状况。因此,总会有某种形式的延迟。您可以通过消除$(document).ready()的需要来减少延迟,但是我怀疑它还不足以让它达到您希望的效果。

$.get('page.html', function (result) { 
    // note, you may need to use `.filter` rather than `.find` depending on the structure of `result` 
    $('#target').html($($.parseHTML(result)).find('#target2')); 
}); 

或留下你的代码是负$(document).ready,并将其移动到目标后的div就像在你的榜样。

完全消除延迟的唯一方法是通过将html直接插入到页面服务器端来消除使用$.ajax的需要。

-2

document ready将被触发,直到整个页面加载完毕,只需将其删除,#testdiv已在DOM上完成呈现后调用​​。 这里的例子

<script src="https://code.jquery.com/jquery-1.10.2.js"></script> 

<div id="testdiv"></div> 
<div id="error"></div> 

<script> 
$("#testdiv").load("/references/embed1.html #testdiv2", function(response, status, xhr) { 
    alert("Triggered"); 
    if (status == "error") { 
    var msg = "Err trying to load "; 
    $("#error").html(msg + xhr.status + " " + xhr.statusText); 
    } 
}); 
</script> 

https://jsfiddle.net/Angel_xMu/rer3yuny/1/

相关问题