首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法操作AJAX load()加载的外部HTML的DOM元素

无法操作AJAX load()加载的外部HTML的DOM元素
EN

Stack Overflow用户
提问于 2014-07-24 15:17:05
回答 2查看 541关注 0票数 0

我跟踪了HTMl in index.php

代码语言:javascript
复制
<div id="internal" class="internal-class"></div>
<a href="external.php #external-element" class="button">Load</a>

像这样的CSS

代码语言:javascript
复制
#internal {
    padding: 50px;
    background: green;
    display: inline-block;
}
#external-element {
    width: 50px;
    height: 50px;
    background: yellow;
}

我有一个外部php页面,external.php是这样的

代码语言:javascript
复制
<div id="external-element" class="external-class"></div>

我在index.php中使用了以下脚本

代码语言:javascript
复制
$(document).ready(function() {
    $('a').click(function(event){
        $attrib = $(this).attr('href');
        $('#internal').load($attrib,function(){
            alert($('#internal').attr('class'));
            alert($('.external-element').attr('class'));

        });
        event.preventDefault();
    });
});

在上面的代码中,jQuery脚本成功地在div #internal中从external.php加载#external-element。加载之后,我想同时提醒类#internal#external-element

代码语言:javascript
复制
$('#internal').load($attrib,function(){

    alert($('#internal').attr('class'));
    alert($('.external-element').attr('class'));

});

以上代码成功地通知了#internal & #external-element类的名称。但当我写

代码语言:javascript
复制
$('#internal').load($attrib);
    alert($('#internal').attr('class'));
    alert($('#external-element').attr('class'));

然后,上面的代码并没有提醒#external-element类。它的意思是undefined

我认为,在AJAX load()之后,它无法操作load()的DOM。

请帮帮我。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-24 15:25:26

在您的代码中:

代码语言:javascript
复制
$('#internal').load($attrib,function(){
        alert($('#internal').attr('class'));
        alert($('.external-element').attr('class'));
});

它成功地发出了警报,因为load中的异步回调函数是在load完成时(即当加载元素时)调用的。

当你这样做时:

代码语言:javascript
复制
$('#internal').load($attrib);
alert($('#internal').attr('class'));
alert($('#external-element').attr('class'));

当警报被调用时,load调用不一定完成。

票数 1
EN

Stack Overflow用户

发布于 2014-07-24 15:19:51

这是因为.load是异步的。当您在失败的尝试中运行alert时,内容仍然被加载到#internal中--因此您需要像第一个示例一样使用回调函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24937693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档