使用JQuery获取父对象的父对象

使用JQuery获取父对象的父对象,jquery,Jquery,我有一个正在消失的删除动画代码,我想让整个div“parent\u parent”消失 这是HTML <div class="parent_parent"> <div class="parent"> <a href="?delete=1" class="delete_link"></a> </div> </div> 但是到目前为止没有动画发生,但是如果我只调用一个父对象,那么内部div确实会

我有一个正在消失的删除动画代码,我想让整个div“parent\u parent”消失

这是HTML

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

但是到目前为止没有动画发生,但是如果我只调用一个父对象,那么内部div确实会消失。我也没有收到任何错误消息。

您的代码对于您尝试执行的操作来说仍然太复杂。这样更好:

// $(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();
                });
            }
        });
    });
});​

如果您按原样使用此代码示例,它将起作用。

您可能没有阻止默认的锚定标记操作。您可能还希望缓存要多次使用的引用。以下是工作代码:

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


还要注意,我使用的是
closest()
,而不是在
parent()
上加倍。只是一种风格偏好。另外,如果您的元素嵌套得更深入,它仍然可以使用
closest()

工作。不确定这是您的问题还是错误复制,但您在最后一个
父级()
幻灯片之间缺少
。是的,这是错误复制!感谢您捕捉到这一点。另外,在回调函数中,
parent
未定义。您需要
$(this)
,然后需要对所需内容的引用。@SimpleCoder nice,我打赌这就是问题所在。应该把它作为一个答案。好。但是,我建议您为每个
div
指定自己的ID。这样,您就不需要处理
parent()
和类了。我甚至没有得到幻灯片动画,更不用说删除了。真令人伤心。我想你需要给我们一些背景
success
可能是对Ajax操作的回调。请发布使用
success
的代码,因为这将决定第一个
所指的内容。我不知道为什么在发布回复时遗漏了此内容,但我喜欢它。缓存原始的父jQuery对象也会起作用,但由于性能会有细微的不同,我认为这将归结为样式首选项,而不是任何东西!显然,他确实将父对象缓存在
parent
中,但此时我不确定它指的是什么。好吧,原来的问题已经被编辑了很多次,很难说出有什么以及我们建议的结果是什么我不认为它原来就在那里。更新了我的回复;显示缓存重用的jQuery对象可能仍然有帮助。很高兴它起作用了。解决办法是什么?您可以发布自己问题的答案,甚至接受它,以便在这个问题上遇到障碍的人可以学习。:-)我会的,但我没有100个代表,所以我要等18个小时。
function(e) {
    e.preventDefault();
    var theParent = $(this).closest(".parent_parent");    
    theParent.slideUp(300, function() {
        theParent.remove();
    });
};