删节点用倒序删除.
比如说现有一个树有3个节点.
节点下标分别为0, 1, 2.
你用正序的话, 就是从0循环到2, 执行三次
第一次执行, 会删除下标为0的节点.
这个时候树剩下二个节点, 这二个节点自动向前补进一位.
从1, 2变成0, 1.
第二次执行的时候, 会删除下标为1的节点.
这个时候树剩下下标为0的节点.
第三次执行的时候, 会删除下标为2的节点.
但树里面没有下标为2的节点, 没完成删除操作.
循环结束, 树里面还剩下下标为0这个节点.
错误操作:
function del()
{
var del_id=id;
var del=document.body.getElementsByTagName("span");
for(k=1;k<del.length;k++)
{
del[k].parentNode.removeChild(del[k]);//这编写只删除第1,3,5,7,9
del[0].parentNode.removeChild(del[0]);//这编写只删除第1,2
}
}
正确操作:
function del()
{
var del_id=id;
var del=document.body.getElementsByTagName("span");
var len=del.length
for(var i=len-1 ;i >=0; i--)
{
del[i].parentNode.removeChild(del[i]); //全部删除
}
}
比如说现有一个树有3个节点.
节点下标分别为0, 1, 2.
你用正序的话, 就是从0循环到2, 执行三次
第一次执行, 会删除下标为0的节点.
这个时候树剩下二个节点, 这二个节点自动向前补进一位.
从1, 2变成0, 1.
第二次执行的时候, 会删除下标为1的节点.
这个时候树剩下下标为0的节点.
第三次执行的时候, 会删除下标为2的节点.
但树里面没有下标为2的节点, 没完成删除操作.
循环结束, 树里面还剩下下标为0这个节点.
错误操作:
function del()
{
var del_id=id;
var del=document.body.getElementsByTagName("span");
for(k=1;k<del.length;k++)
{
del[k].parentNode.removeChild(del[k]);//这编写只删除第1,3,5,7,9
del[0].parentNode.removeChild(del[0]);//这编写只删除第1,2
}
}
正确操作:
function del()
{
var del_id=id;
var del=document.body.getElementsByTagName("span");
var len=del.length
for(var i=len-1 ;i >=0; i--)
{
del[i].parentNode.removeChild(del[i]); //全部删除
}
}