2011-09-28 132 views
1

我有以下这应该删除元素“.mycontainer”,当我点击一个关闭按钮。虽然它不会删除元素。当我使用萤火虫。我可以看到它只是在代码的开始处将它移动到html标记之外。jquery .remove不按预期方式工作

$('.closeButton').click(function() { 
     $(".mycontainer").slideUp(function() { 
      $(".closeButton").parent().appendTo(".ContentsHolder");   
      $(this).remove(); 
     }); 
    }); 

它的工作原理,如果我注释掉3号线//$(".closeButton").parent().appendTo(".ContentsHolder");

但这删除的内容,所以我不能再访问它。

编辑:

我的HTML看起来是这样的,如果它有助于了解我在做什么...

<div class='ContentsHolder'> 

</div> 
<div class='mycontainer'> 
    <div class='myContent'> 
     <a class='closebutton'>close</a> 
     ... other content ... 
    </div> 
</div> 

我也设法让它通过把一个延迟的工作去除mycontainer $(this).delay(500).remove();

虽然我不认为这是一个很好的解决方案。

+0

你能告诉我们一些HTML以及:)? – bang

回答

1

我以前解决同样的问题是这样的:

$(".mycontainer").slideUp(500, function() { 
    $(this).remove(); 
}); 
+0

这没有工作......这是额外的线,我在我的例子中,导致它打破... – Tom

+0

可能相反,缺少延迟是造成这里问题的原因。 –

2

你可以只链中的删除功能的效果基本show像这样经过:

$('.closeButton').click(function() { 
     $(".mycontainer").slideUp(function() { 
      $(".closeButton").parent().appendTo(".ContentsHolder");   
     }).remove(); 
    }); 
+0

不管...... –

+1

这会删除父按钮之前它已被追加到ContentsHolder – Tom

1

它看起来像$(this)是一个不同的上下文你的想法。

尝试添加console.log($(this));以查看控制台中的实际上下文。

$('.closeButton').click(function() { 
    $(".mycontainer").slideUp(function() { 
     $(".closeButton").parent().appendTo(".ContentsHolder"); 
     console.log($(this)); 
     $(this).remove(); 
    }); 
});