[英]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);
}
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.