首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用jQuery和DOM删除父级的父级

使用jQuery和DOM删除父级的父级
EN

Stack Overflow用户
提问于 2010-07-28 23:21:38
回答 3查看 3K关注 0票数 1

我的html如下所示:

代码语言:javascript
运行
复制
<li>
    <div>
        <p class="delete">
            <a href="#">X</a>
        </p>
    </div>
    <div class="friend-avatar">
        <img src="" />
    </div>
</li>

单击“delete”段落中的锚标记后,我将显示一个弹出(使用jQuery-警报),如果用户选择“是”,我希望包含此内容的整个li单击a以淡出,然后删除它。我试着做这样的事,但是李小龙依然可见:

代码语言:javascript
运行
复制
$(function() {
    $(".delete a").click( function(){
        jConfirm('Remove friend?', 'Confirmation Dialog', 
        function(r){
            if(r==true){
               parent_li = $(this).closest('li');
               parent_li.fadeOut('slow', function() {$(this).remove();});
            }   
        });
        return false;
    });
});

我做错什么了?

更新

刚刚注意到,当我单击这个“删除”链接时,firebug会显示以下错误:

代码语言:javascript
运行
复制
a.ownerDocument is undefined
/site_media/jquery/jquery-1.4.2.js
Line 117
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-28 23:31:05

我对这个插件并不熟悉,但我的猜测是this并不是指单击的元素,而是指对话框。

尝试在this之外的变量中引用jConfirm()

代码语言:javascript
运行
复制
$(function() {
    $(".delete a").click( function() {

            // reference the <a> element
        var $a = $(this);
        jConfirm('Remove friend?', 'Confirmation Dialog', 
        function(r){
            if(r==true){

                 // use a to find the closest <li>
               var parent_li = $a.closest('li');
               parent_li.fadeOut('slow', function() {$(this).remove();});
            }   
        });
        return false;
    });
});
票数 2
EN

Stack Overflow用户

发布于 2010-07-28 23:31:05

您对parent_li的引用超出了变量的范围。

为了兴趣起见,我会将调用更改为它自己的函数,这样我就可以重用它。

代码语言:javascript
运行
复制
$(function() {
    $(".delete a").click( function(){
        jConfirm('Remove friend?', 'Confirmation Dialog', 
        function(r){
            if(r==true){
               parent_li = $(this).parents('li');
               $(parent_li).fadeOut('slow', removeLi(parent_li));
            }   
        });
        return false;
    });
});

function removeLi(parent_li){
    $(parent_li).remove();
};
票数 0
EN

Stack Overflow用户

发布于 2010-07-28 23:36:46

您应该将$(this)存储在变量中,因为弹出式函数中的作用域会发生变化。

做以下事情:

代码语言:javascript
运行
复制
$(function() {
    $(".delete a").click( function(){
        var $link = $(this); // Here's the magic
        jConfirm('Remove friend?', 'Confirmation Dialog', 
        function(r){
            if(r==true){
               parent_li = $link.closest('li');
               parent_li.fadeOut('slow', function() {$(this).remove();});
            }   
        });
        return false;
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3358337

复制
相关文章

相似问题

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