繁体   English   中英

自定义删除DOM元素的问题

[英]Custom removing of DOM elements issue

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

如果在调用hide回调时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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM