什么时候AJAX加载DOM节点"准备好"?

时间:2014-05-08 11:04:28

标签: javascript jquery ajax dom dom-events

如果在网页中我在初始页面加载和DOM就绪事件之后加载了一些内容,那么插入的节点何时“准备好”,在计算其大小的意义上,考虑CSS规则并且所有?

$.ajax({
    url: ajaxUrl,
    success: function (data) {

        var page = $(data).find('.page').first();

        page.appendTo(pages_container);

        // if I try to get the width of an element here, I get 0
        console.log(page.width()); // -> 0

        // but if I do it, let's say 500ms later, now it is computed
        setTimeout(function () {
            console.log(page.width()); // -> correct width, non zero
        }, 500);
    }
});

是否存在任何类型的事件,例如“在插入的dom ready上”或者能够执行函数之后计算了ajax插入内容的大小/布局?

1 个答案:

答案 0 :(得分:0)

您的问题不应该在您勾勒出来时发生。将元素添加到页面中不是异步操作。 Javascript DOM操作不是多线程的。它只是在应用DOM更改后返回。

只要你的追加完成(包括尺寸属性),DOM 就可以准备好使用了:

page.appendTo(pages_container); 

通常的原因是在插入jQuery对象之前访问属性,或者新的jQuery对象在视觉上被隐藏并稍后显示(fadein等),但我看到代码中没有转换。

问题/想法:

  • 你可以模拟一个JSFiddle来复制你的问题吗?
  • 还要检查插入后可能修改DOM的其他插件等。
  • 插入的页面中是否有JS代码?
  • 这也发生了什么浏览器?