为什么jquery在.load()之后没有看到页面中的变化?

时间:2012-04-27 10:36:43

标签: jquery

我刚尝试用jQuery的.load方法改变我的页面内容。

虽然内容发生了变化而没有问题,但我发现如果我尝试选择某些东西,jQuery仍然“看到”旧内容,例如:

页:

 <div id="mycontentarea">
   <div id="myfirstcontent"></div>
   <div id="mysecondcontent"></div>
</div>

替换内容:

<div id=mythirdcontent"></div>
<div id=myfourthcontent"></div>

的javascript:

// replace original content
$('#mycontentarea').load('replacement.html');
// print out the id of the first child
console.log($("#mycontentarea").children().attr("id"));

控制台会打印出“myfirstcontent”而不是“mythirdcontent” - 为什么?

1 个答案:

答案 0 :(得分:6)

因为load是异步的,并且在替换发生之前执行了console.log调用。

将依赖于load调用结果的任何代码移动到成功完成时执行的回调:

$('#mycontentarea').load('replacement.html', function() {
    //Anything in here is executed once the content has been returned successfully
    console.log($("#mycontentarea").children().attr("id"));
});

来自load上的文档:

  

如果提供“完整”回调,则在之后执行   已经执行了后处理和HTML插入。回调是   为jQuery集合中的每个元素触发一次,然后设置   依次为每个DOM元素。