自定义删除 DOM 元素问题

Custom removing of DOM elements issue

本文关键字:问题 元素 DOM 删除 自定义      更新时间:2023-09-26

我在删除一些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

如果在调用隐藏回调时 for 循环增加了 i 的值,那么您将传递要删除的错误元素。试试这个,改为:

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

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

你试过吗

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);
            }
        }
    }
});

小提琴在这里 http://jsfiddle.net/TTGr7/3/