var oNodes = [
{id: 0, name: 'root', pid: -1},
{id: 1, name: '默认分类', pid: 0},
{id: 11, name: '默认子分类1', pid: 1},
{id: 12, name: '默认子分类2', pid: 1},
{id: 2, name: '家庭分类', pid: 0},
{id: 21, name: 'bthte', pid: 2},
{id: 22, name: 'ertw', pid: 2},
{id: 23, name: 'tetvbg', pid: 22},
{id: 24, name: 'erbgb', pid: 22},
{id: 25, name: 'hnhfdg', pid: 2},
{id: 3, name: '公司分类', pid: 0},
{id: 31, name: 'vgbdhn', pid: 3},
{id: 32, name: 'ndnhn', pid: 31},
{id: 33, name: 'pnhnnhg', pid: 31},
{id: 34, name: 'qgtrh', pid: 3}];
function delGroup(name) {
for (var i = 0, len = oNodes.length; i < len; i++) {
console.log(oNodes[i].name);//控制台提示此处 TypeError: oNodes[i] is undefined
if(oNodes[i].name == name) {
oNodes.splice(i,1);
console.log(i);
}
}
myTree.tree = oNodes;
fragment = myTree.init(0);
ul.innerHTML = fragment;
}
想了半天不懂为什么,求大神解答
很简单,因为你删除一个元素之后,长度变化了
所以在遍历时删除元素并不是个好习惯,解决方法有两个:
简单粗暴的改成倒着遍历,
for(var i = oNodes.length - 1; i > -1; i--) {...}
先遍历,查找到所有符合的条件的node之后记录下它的下标记录进一个数组例如delList,然后对delList倒排之后进行遍历删除原数组的项
最后,此问题与作用域毫无关系