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