Javascript Jquery加载不';不要立即加载DOM元素

Javascript Jquery加载不';不要立即加载DOM元素,javascript,jquery,dom,Javascript,Jquery,Dom,我的html内容如下所示 <div id="externalContent"></div> <script src="jquery.js"></script> <script> console.log("the number of div elements before loading tempfile are " +$("div").length) $('#externalContent').load('tempfil

我的html内容如下所示

<div id="externalContent"></div>
<script src="jquery.js"></script>
<script>
    console.log("the number of div elements before loading tempfile are " +$("div").length)
    $('#externalContent').load('tempfile.html')
    console.log("the number of div elements after loading tempfile are " + $("div").length)
    $('#externalContent').append('temp.html contents loaded above...')
    setTimeout(function(){
        console.log("the number of div elements in page after timeout are " + $("div").length)
    }, 5000)
</script>
那么,为什么在$.load之后打印的第二条log语句将元素数显示为一? 如果dom加载(通过
$.load
$(“..”).html(“blah..blah..)
等)是一项异步任务,我如何确保dom完全加载

注意:
tempfile.html
是一个包含1000个div元素的大容量文件

<div id="1">1</div><div id="2">2</div><div id="3">3</div>..... <div id="1000">1000</div>
123。。。。。1000

您应该使用回调函数,因为请求是异步的

$('#externalContent').load('tempfile.html', null, function() {
    console.log("the number of div elements after loading tempfile are " + $("div").length);
});

请参阅。

您应该使用回调函数,因为请求是异步的

$('#externalContent').load('tempfile.html', null, function() {
    console.log("the number of div elements after loading tempfile are " + $("div").length);
});

请参阅。

正如Pointy所评论的,您需要使用传入.load()的回调,因为jQuery只有在异步调用完成后才会调用它。这是你会经常遇到的事情。见-

这里的例子就是你想要的-

$( "#result" ).load( "ajax/test.html", function() {
  alert( "Load was performed." );
});

正如Pointy所评论的,您需要使用传入.load()的回调,因为jQuery只有在异步调用完成后才会调用它。这是你会经常遇到的事情。见-

这里的例子就是你想要的-

$( "#result" ).load( "ajax/test.html", function() {
  alert( "Load was performed." );
});

.load()
确实是异步的。您可以将回调函数传递给
.load()
,加载完成后将调用该函数。@Pointy,$.html(“…”)也是这样吗?就像我通过ajax调用获取
tempfile.html
,并使用
$.html
设置其内容一样。$.html是否立即加载1000个元素?没有
$.html()
这样的东西。如果您谈论的是
.html()
方法,那么不,这不是异步的
.load()
是异步的,因为它固有地涉及网络操作(HTTP请求)。
.load()
函数只是
$.ajax()
之上的一个方便的API。换句话说,执行自己的ajax调用,然后使用
.html()。只需将您的其他内容放入回调,它将在执行其余行之前首先加载。谢谢,Pointy。。。。您的评论就是答案…
.load()
确实是异步的。您可以将回调函数传递给
.load()
,加载完成后将调用该函数。@Pointy,$.html(“…”)也是这样吗?就像我通过ajax调用获取
tempfile.html
,并使用
$.html
设置其内容一样。$.html是否立即加载1000个元素?没有
$.html()
这样的东西。如果您谈论的是
.html()
方法,那么不,这不是异步的
.load()
是异步的,因为它固有地涉及网络操作(HTTP请求)。
.load()
函数只是
$.ajax()
之上的一个方便的API。换句话说,执行自己的ajax调用,然后使用
.html()。只需将您的其他内容放入回调,它将在执行其余行之前首先加载。谢谢,Pointy。。。。您的注释就是答案……请注意,load函数的第二个参数是可选的,因此您不必将其设为null,甚至不必包含它
.load('tempfile.html',function(){})也同样有效。但是,如果您需要将某些数据从一个页面传递到下一个页面,那么第二个参数就是您的朋友。请注意,load函数的第二个参数是可选的,因此您不必将其设为null,甚至不必包含它
.load('tempfile.html',function(){})也同样有效。但是,如果您需要将一些数据从一页传送到下一页,那么第二个参数就是您的朋友。