jQuery和$(document).ready()的时间问题

时间:2010-04-27 18:11:22

标签: javascript jquery

文档准备好后,我有以下代码块代码:

$(document).ready(function() {
    createDivs(); // creates some divs with class 'foo';

    // iterate
    $(".foo").each(function(index) {
        alert(index + " - " + $(this).text());
    });
}

我发现“iterate”部分完全错过了我在createDivs()方法中创建的div!我不知道有什么时间问题吗?为什么jquery没有看到刚刚创建的div?

3 个答案:

答案 0 :(得分:1)

根据我的经验,DOM操作有时可能会异步,可能是由于浏览器的优化,我通常的解决方案是让createDivs()返回创建的div然后使用返回的元素

var divs = createDivs();
$('.foo').and(divs).each(function(){
    //happy fun time
})

答案 1 :(得分:0)

时机不是问题。也许createDivs()不会将元素添加到DOM中?

答案 2 :(得分:0)

我发现在执行代码时,Javascript就像F1赛车中的公牛一样。没有让它等待在任何特定链中执行代码。

您应该创建一种情况,即createDivs()在完成相对于回调的完成后能够触发任何相关代码。如果没有看到createDivs代码,很难为您提供实现它的方法。

更新

真的只适用于你正在进行异步通话(根据我下面的朋友的说法)。