在DOM中尚未加载div

时间:2011-01-27 12:29:41

标签: jquery dom load find

我正在使用jQuery load()函数从一个div内部加载一些内容。它显示在浏览器上确定,但是当我尝试使用函数find()时,它找不到任何东西,因为它还没有显示在DOM中。我已经尝试打印出div的HTML内容(保存加载内容的那个),就在它们被加载之后,就在我使用find()之前 - 它显示了div之前的那个HTML内容已加载。

所以问题是,如果它不在DOM中,我如何在加载的内容中查找某个id?

也许我可以使用live()和自定义事件解决这个问题?

以下是一些非常简化的代码:

$('#serverctl-server-dc').load('query.php?m=serverctl&q=shelf_view');
console.log($('#srv-1111').html());

生成的源包含#srv-1111元素,它包含html。我虽然没有在控制台中得到任何东西。

4 个答案:

答案 0 :(得分:3)

“load”是异步的。您应该将处理放在加载请求的回调函数参数中。只有这样,你才能确定DIV的内在元素是否可用。

是的,如果要处理新元素上的事件,可以使用“live()”。如果您只是想操纵新元素(除了用CSS设置它们之外),例如用其他东西替换一些文本,或者为它们设置动画,你需要等待它们被加载。

答案 1 :(得分:0)

原则上它应该找到你的元素但是你需要验证你的动作的顺序。

你什么时候使用find函数?

使用Chrome开发者工具,因为它会向您显示当前处理的html,而不是已加载的原始文件。

如果需要更多说明,请发布您的代码。 祝你好运!

答案 2 :(得分:0)

您可以使用firebug并调试脚本。加载内容后,搜索id以查看它是否真的存在。

HTH

答案 3 :(得分:0)

我需要操纵$('#srv - '+ maskId)元素,所以我实现的是神奇的 - 至少对我而言:

$('#serverctl-server-dc').live('getId', function(){
    $('#srv-'+maskId).parent().css('border','4px solid #AF0200');
});

$('#serverctl-server-dc').load('query.php?m=serverctl&q=shelf_view', function(){
    $('#serverctl-server-dc').trigger('getId');
});