Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery onClick、loop-thru-divs和toggle用于目录探索_Jquery_Onclick_Each - Fatal编程技术网

Jquery onClick、loop-thru-divs和toggle用于目录探索

Jquery onClick、loop-thru-divs和toggle用于目录探索,jquery,onclick,each,Jquery,Onclick,Each,我基本上使用一个自定义界面来显示和隐藏目录树中的项。id仅在其为文件夹时分配给元素,并且所有文件夹内容(其他元素)的名称与父元素的id相同。现在显示隐藏作为同伴工作: $(".directory-item").click(function () { $('div[name=' + this.id + ']').toggle(); }); 这是伟大的作品,除了现在我需要折叠子文件夹或子文件夹点击。因此,代码需要类似于: $(".directory-item").click(functio

我基本上使用一个自定义界面来显示和隐藏目录树中的项。id仅在其为文件夹时分配给元素,并且所有文件夹内容(其他元素)的名称与父元素的id相同。现在显示隐藏作为同伴工作:

$(".directory-item").click(function () {
    $('div[name=' + this.id + ']').toggle();
});
这是伟大的作品,除了现在我需要折叠子文件夹或子文件夹点击。因此,代码需要类似于:

$(".directory-item").click(function () {
    $('div[name=' + this.id + ']').toggle();
    $('div[name=' + this.id + ']').each(function(){
         var each_id = this.id; //NEW ID FROM .each NOT .click
         $('div[name=' + each_id + ']').toggle();
    });
});
当然,这并不能解释所需的递归。lond story short,扩展文件夹很棒。。。但是,如果收缩打开了子文件夹的文件夹,它们将保持打开状态

HTML/RAZOR:

        <div class="folder-explorer">
            @{ 
                var parentFolder = "";
            }
            @for (int i = 0; i < ViewBag.fullHierarchy.Count; i++) {
                var item = ViewBag.fullHierarchy[i];
                //Set Previous item when applicable
                int indent_level = (item.Level - 1) * 25 + 10;
                string display = "";
                string item_type = item.Type;
                string icon_type = "";
                var item_name = "";
                var item_id = "";

                //Set item visibility
                if (item.Level == 1) {
                    display = "block";
                }
                else {
                    display = "none";
                }
                //Set item icon
                if (item_type == "folder") {
                    icon_type = "fa-folder";
                }
                else {
                    icon_type = "fa-file";
                }

                //Always assign ID, only if its a folder
                if (item_type == "folder") {
                    item_id = item.ItemName;
                }else {
                    item_id = "";
                }

                //Set item name to parent folder
                if (item.Level > 1) {
                    var previous_item = ViewBag.fullHierarchy[i - 1];
                    item_name = item.Parent;
                    if (item.Level > previous_item.Level) {
                        @:<div name="@item_name">
                    }
                    else if (item.Level < ViewBag.fullHierarchy.Count) {
                        var next_item = ViewBag.fullHierarchy[i + 1];
                        if (item.Level < next_item.Level) {
                            @:</div>
                        }
                    }
                }

                <div class="directory-item" id="@item_id" name="" style="padding-left: @(indent_level)px;  display: @(display)">
                    <i class="fa @icon_type"></i>
                    @item.ItemName (id: @item_id, name: @item_name, level: @item.Level)
                    <i class="fa  fa-angle-right float-right"></i>
                </div>
            }
        </div>

我真正想做的是:点击,显示/隐藏下一个关卡。它本质上是一个目录浏览器。我让它用于扩展,但当我点击Hirr up时,子级别不会崩溃,所以我决定尝试将每组孩子包装在一个以其父母命名的div中。。。但这似乎并不容易。

您确实需要提供一个HTML示例(从浏览器输出),以便轻松生成模型。添加了更多代码。
public void FullDirList(DirectoryInfo d) {
    count_hierarchy += 1;

    int directory_level = count_hierarchy;
    // Console.WriteLine("Directory {0}", dir.FullName);
    // list the files
    try {
        foreach (FileInfo f in d.GetFiles()) {
            //Console.WriteLine("File {0}", f.FullName);
            files.Add(f);
            HierarchyItem file = new HierarchyItem();
            file.ItemName = f.Name;
            file.Type = "file";
            file.Level = directory_level;
            var dirName = new DirectoryInfo(f.Directory.ToString()).Name;
            file.Parent = dirName.ToString();
            fullHierarchy.Add(file);
        }
    }
    catch {
        Console.WriteLine("Directory {0}  \n could not be accessed!!!!", d.FullName);
        return;  // We alredy got an error trying to access dir so dont try to access it again
    }

    // process each directory
    // If I have been able to see the files in the directory I should also be able 
    // to look at its directories so I dont think I should place this in a try catch block
    foreach (DirectoryInfo e in d.GetDirectories()) {
        folders.Add(e);
        HierarchyItem file = new HierarchyItem();
        file.ItemName = e.Name;
        file.Type = "folder";
        file.Level = directory_level;
        file.Parent = e.Parent.ToString();
        fullHierarchy.Add(file);
        FullDirList(e);
    }
    count_hierarchy -= 1;

}