在用js实现删除所选邮件行时,会遇到不能完全删除的问题,代码如下:
function delmail()
{
var mail = document.getElementsByName("mail");
for(var x=0;x<mail.length;x++)
{
if(mail[x].checked)
{
var trNode = mail[x].parentNode.parentNode;
trNode.parentNode.removeChild(trNode);
}
}
这是由于在for循环中,如果if条件满足了,一条记录就会被删除,则mail.length就减一,这样,连续的两条就不能完全删除。这时,常规做法为:
function delmail()
{
var mail = document.getElementsByName("mail");
var arr = new Array();
var pos = 0;
for(var x = 0;x<mail.length;x++)
{
if(mail[x].checked)
{
var trNode = mail[x].parentNode.parentNode;
arr[pos++] = trNode;
}
}
for(var x=0;x<arr.length;x++)
{
var trNode = arr[x];
trNode.parentNode.removeChild(trNode);
}
}
在for循环外,设置了临时容器arr,用于存放要删除的行,在第二个for循环中统一删除。
另一种简单的做法为:
function delmail()
{
var mail = document.getElementsByName("mail");
for(var x=0;x<mail.length;x++)
{
if(mail[x].checked)
{
var trNode = mail[x].parentNode.parentNode;
trNode.parentNode.removeChild(trNode);
//由于删除一条记录,mail.length会减一,所以x也需要减一
x--;
}
}
}
由于mail.length减一,则x也减一,这样就不会跳过需要删除的行了……