2012-04-05 146 views
2

我有一个消失的删除动画代码,我想让整个div“parent_parent”消失。使用JQuery获得父母的父母

下面是HTML

<div class="parent_parent"> 
    <div class="parent"> 
     <a href="?delete=1" class="delete_link"></a> 
    </div> 
</div> 

这里是jQuery代码,使parent_parent DIV消失的一部分:

$(document).ready(function() { 
    $('a.delete_element').click(function(e) { 
     e.preventDefault(); 
     var parent = $(this).parent(); 
     $.ajax({ 
      type: 'get', 
      url: 'delete.php', 
      data: 'ajax=1&delete=' + parent.parent().attr('id').replace('sort_', ''), 
      beforeSend: function() { 
       parent.parent().animate({ 
        'backgroundColor': '#fff' 
       }, 300); 
      }, 
      success: function() { 
       parent.parent().slideUp(300,function() { 
       parent.parent().remove(); 
       }); 
      } 
     }); 
    }); 
});​ 

但到目前为止,没有动画发生,但如果我只需要调用一个父母然后内部div消失。我也没有收到任何错误消息。

+1

不知道它是你的问题还是miscopy,但是你在最后一个'parent()'和'slideUp'之间缺少'.'。 – Loktar 2012-04-05 02:11:49

+0

是的,这是miscopying!感谢您的支持。 – drummer392 2012-04-05 02:13:18

+1

此外,在您的回调函数中,未定义“父”。你需要'$(this)',然后引用你想要的。 – 2012-04-05 02:13:39

回答

4

你的代码对于你所要做的事情仍然太复杂。这是更好的:

// $(function(){ is shorthand for $(document).ready(function(){ 
$(function() { 
    $('a.delete_element').click(function(e) { 
     e.preventDefault(); 
     // Don't give thing ambiguous names like 'parent' 
     // You should change your class names too. 
     var container = $(this).closest(".parent_parent"); 
     $.ajax({ 
      type: 'get', 
      url: 'delete.php', 
      // You had multiple instances of parent.parent(), but no direct usage of parent alone 
      // This is a clue that you can simplify parent.parent() since you are traversing to the same element every time 
      data: 'ajax=1&delete=' + container.attr('id').replace('sort_', ''), 
      beforeSend: function() { 
       containter.animate({ 
        'backgroundColor': '#fff' 
       }, 300); 
      }, 
      success: function() { 
       container.slideUp(300, function() { 
        // Do not repeat the same selector within a callback 
        // That's what `this` is for 
        $(this).remove(); 
       }); 
      } 
     }); 
    }); 
});​ 

如果您使用此代码示例,它将工作。

+0

我甚至没有上移动画,更不用说删除了。这很令人伤心。 – drummer392 2012-04-05 02:17:02

+0

我认为你需要在这里给我们一些背景。 'success'可能是Ajax操作的回调。请发布使用'成功'的代码,因为这将决定我的问题中发布的第一个“this”是指什么 – 2012-04-05 02:18:01

+0

! – drummer392 2012-04-05 02:20:49

1

您可能不会阻止默认锚标记操作。您可能还想要缓存将要多次使用的引用。这里的工作代码:

function(e) { 
    e.preventDefault(); 
    var theParent = $(this).closest(".parent_parent");  
    theParent.slideUp(300, function() { 
     theParent.remove(); 
    }); 
}; 

小提琴:http://jsfiddle.net/VXEUM/

还请注意,我使用closest()而不是在parent()翻倍的。只是一种风格偏好。此外,如果你的元素嵌套更深,它仍然可以使用closest()

+0

我想通了 – drummer392 2012-04-05 02:24:25

+1

更新了我的回复;可能仍然有助于您展示缓存重用的jQuery对象。很高兴它的工作。解决方案是什么?你可以发布自己的问题的答案,甚至接受它,以便有人在这个问题上磕磕绊绊可以学习。 :-) – 2012-04-05 02:27:17

+0

我会,但我没有100代表,所以我必须等待18小时。 – drummer392 2012-04-05 02:34:50