javascript中有好多令我费解的东西, 一些问题我知道修改的方法,但解释不了原因。 最近又碰到一个。
一个 “全选——删除”功能, 以下是以下是单击“删除”按钮出触发代码片段:
var tbody = document.getElementById("mappingTd"
);
var mappingCheck = document.getElementsByName("checkboxInMapping" );
var length = mappingCheck.length;
for(i = 0; < length; ) {
if (mappingCheck.item(i).checked) {
var str_value = mappingCheck.item(i).value;
var tr = document.getElementById(str_value );
tbody.removeChild(tr);
}
else {
i++ ;
}
}
var mappingCheck = document.getElementsByName("checkboxInMapping" );
var length = mappingCheck.length;
for(i = 0; < length; ) {
if (mappingCheck.item(i).checked) {
var str_value = mappingCheck.item(i).value;
var tr = document.getElementById(str_value );
tbody.removeChild(tr);
}
else {
i++ ;
}
}
这段代码有时候“全选”后并不能删除全部所选信息,几率大概为2/3。修改时我的第一反应就是将for改成while,过去遇到过类似问题,for和while在js中有时候并不互换。以下是修改后的代码:
var tbody = document.getElementById("mappingTd"
);
var mappingCheck = document.getElementsByName("checkboxInMapping" );
var length = mappingCheck.length;
var i = 0 ;
while(i < length) {
if (mappingCheck.item(i).checked) {
var str_value = mappingCheck.item(i).value;
var tr = document.getElementById(str_value);
tbody.removeChild(tr);
}
else {
i++ ;
}
}
var mappingCheck = document.getElementsByName("checkboxInMapping" );
var length = mappingCheck.length;
var i = 0 ;
while(i < length) {
if (mappingCheck.item(i).checked) {
var str_value = mappingCheck.item(i).value;
var tr = document.getElementById(str_value);
tbody.removeChild(tr);
}
else {
i++ ;
}
}
这次可以完成所需功能,两段代码理应可以互换,不知道为什么会出现这样的问题,我知其然,不知其所以然。