我正在使用下面的自我调用函数生成一个使用javascript的树(嵌套的UL列表)。我可以补充一点,它是在一个jQuery插件中,如果这与问题完全相关(也许可能是?)。
变量gd包含从文件结构中嗅探的json /数组,因此它基本上是文件夹和图像的名称,还有一些更多的数据(比如自我解释的isFolder属性等)
for (i = 0; i < gd.length; ++i) {
被自我呼叫打断。
var drawTree = function(self,parent){
var gd = self.data('galleryData');
self.data('sidebar', self.data('sidebar')+'<ul>');
for (i = 0; i < gd.length; ++i) {
console.log('looping '+i+': '+gd[i]['name']+', isFolder: '+gd[i]['isFolder']+', parent: '+gd[i]['parent']);
if ( (gd[i]['isFolder'] == true) && (gd[i]['parent'] == parent) ) {
console.error(gd[i]['name']);
self.data('sidebar', self.data('sidebar')+'<li data-folder="'+gd[i]['fileId']+'" class="folderLink">');
self.data('sidebar', self.data('sidebar')+gd[i]['name']);
self.data('drawTree')(self,gd[i]['fileId']); // <-- The line causing trouble
self.data('sidebar', self.data('sidebar')+'</li>');
}
}
self.data('sidebar', self.data('sidebar')+'</ul>');
};
this.data('drawTree',drawTree);
我的问题是,如果我忽略了问题&#34;行
self.data('drawTree')(self,gd[i]['fileId']);
哪一个进行自我调用(这使我能够列出子文件夹)然后我得到一个整洁的列表,所有&#34; 0级&#34;文件夹(没有父项或父项属性设置为空字符串的文件夹)。但是我当然不会得到任何嵌套文件夹。
Root
actions
appz
categoriez
david
devices
mimetypes
places
space
status
如果我确实包含了自我调用,我会获得所有嵌套级别,但仅限于&#34;级别0和#34;的第一个文件夹,就好像主循环一样(这行来自上面的代码)
Root
actions
actionsSub1
actionSub2
actionSub3
actionSub4
答案 0 :(得分:1)
你有一个全局变量。不要将var
视为可选。
for (i = 0; i < gd.length; ++i) { <-- i is global
现在,当您将var放在i
前面时,其他函数调用不会更改它。
for (var i = 0; i < gd.length; ++i) {