Javascript Jquery加载不';不要立即加载DOM元素
我的html内容如下所示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
<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(){})代码>也同样有效。但是,如果您需要将一些数据从一页传送到下一页,那么第二个参数就是您的朋友。