我在删除某些 HTML 元素时遇到一些问题。
简单介绍一下我的代码。
我正在克隆 <ul>
然后使用弹出对话框显示其内容。然后在 2dim 数组中保存 <li>
原始对象和克隆对象之间的对应对象。因此,从克隆中删除并确认会得到原始 <ul>
中的结果。 .
我遇到的问题是在添加 jQuery 动画并在其回调函数中删除时可能是因为“for”循环。然后,当在不关闭对话框窗口的情况下第二次额外删除时,由于删除元素不当而出现错误!
如果您从一开始就没有亲眼目睹,请尝试多玩一点,不会太久 直到你看到它!
这就是区别 在没有 .hide 动画的情况下工作:http://jsfiddle.net/TTGr7/1/
带动画的 buggy :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
设置为刚刚隐藏的元素。
关于javascript - 自定义删除 DOM 元素问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8808857/