自定义删除DOM元素问题

时间:2012-01-10 18:55:41

标签: javascript jquery jquery-ui

我在删除一些HTML元素方面遇到了一些问题。

关于我的代码的几句话。

我正在克隆<ul>,然后使用弹出对话框显示其内容。然后在2dim数组中,我在原始和克隆之间保存<li>对应的对象。因此,从克隆的那个中删除并确认会在原始<ul>中生成结果。

我遇到的问题是添加jQuery动画并在其回调函数中删除可能是因为“for”循环。然后,当在不关闭对话窗口的情况下另外删除第二次时,通过不正确地移除元素来实现错误!

如果你没有从第一次看到它,尝试多玩一点,它不会很长 直到你看到它!

这是区别 没有.hide动画工作:http://jsfiddle.net/TTGr7/1/

动画错误:http://jsfiddle.net/TTGr7/2/

关键部分和区别在于代码的那一部分:

 del.click(function() {
        var len = markedForDel.b.length;
        if (len > 0) {
            var confirmation = confirm('Delete marked groups');
            if (confirmation) {
                for (var i = 0; i < len; i++) {
                    markedForDel.a[i].remove();
                    markedForDel.b[i].remove();
                    //markedForDel.a.splice(i,1);
                    //markedForDel.b.splice(i,1);
                }
            }
        }
    });

del.click(function() {
    var len = markedForDel.b.length;
    if (len > 0) {
        var confirmation = confirm('Delete marked groups');
        if (confirmation) {
            for (var i = 0; i < len; i++) {
                markedForDel.a[i].hide(function(){
                    markedForDel.a[i].remove();
                });
                markedForDel.b[i].remove();
                //markedForDel.a.splice(i,1);
                //markedForDel.b.splice(i,1);
            }
        }
    }
});

所以我真的需要保留.hide动画并仍然正确删除组。

所以我真的指望你的帮助, BR

2 个答案:

答案 0 :(得分:3)

如果for循环在调用hide回调时将i的值递增,那么您将传递错误的元素以进行删除。试试这个,而不是:

markedForDel.a[i].hide(function() {
    $(this).remove();
});

在hide方法的回调中,this设置为刚隐藏的元素。

答案 1 :(得分:0)

你试过吗

del.click(function() {
    var len = markedForDel.b.length;
    if (len > 0) {
        var confirmation = confirm('Delete marked groups');
        if (confirmation) {
            for (var i = len -1; i >= 0; i--) {
                markedForDel.a[i].hide(function(){
                    markedForDel.a[i].remove();
                });
                markedForDel.b[i].remove();
                //markedForDel.a.splice(i,1);
                //markedForDel.b.splice(i,1);
            }
        }
    }
});

fiddlke http://jsfiddle.net/TTGr7/3/

相关问题