从目录结构中获取路径

时间:2014-05-05 23:05:49

标签: javascript jquery

我想从特定的目录结构中获取路径,如图像上的路径,  如果我点击 chile> citrus> orange 我需要使用“ chile / citrus / orange ”作为路径,这样我就可以在那里创建子目录。我试图在数组中保存元素跨度的每个文本,但它不起作用。

file structure

代码

$(document).ready(function() {
    var files = <?php echo json_encode($folders); ?>;
    var file_tree = build_file_tree(files);
    file_tree.appendTo('#files');


    function build_file_tree(files) {

        var tree = $('<ul>');

        for (x in files) {

            if (typeof files[x] == "object") {
                var span = $('<span class="nombre">').html(x).appendTo(
                    $('<li>').appendTo(tree).addClass('folder')
                );
                var subtree = build_file_tree(files[x]).hide();
                span.after(subtree);
                span.click(function() {
                    $(this).parent().find('ul:first').toggle();
                });

            } else {
                $('<li>').html(files[x]).appendTo(tree).addClass('file').click(function(){
                    window.location=$(this).find("a").attr("href");return false;})
               //The click() function in the line above is where my links for download should be but I am unsure of what to do from here.

            }

        }

        return tree;

    }
    });  

    </script>

2 个答案:

答案 0 :(得分:0)

只有php的解决方案才适合你吗?

    function list_directories($dir){

        $temp_dir = $_SERVER['DOCUMENT_ROOT'].$dir;

        if (is_link($dir)) {
            echo "do nothing";
        } else {

            $pattern = '/./';
            $bad = array(".", "..", ".DS_Store", "Thumbs.db", ".svn", ".git");

            $class = 'dir';
            $contents = scandir($temp_dir,1);
            $files = array_diff($contents, $bad);
            krsort($files);

            echo "<ul>";
            foreach($files as $item){
                $file_extension = strtolower(substr(strrchr($item,"."),1)); 
                echo "<li><a href='http://".$_SERVER['SERVER_NAME'].$dir.$item."'>".$item."</a></li>";
            }
            echo "</ul>";
        }
    }

答案 1 :(得分:0)

我不是jQuery的粉丝,因此我没有真正的经验,所以我会尝试用纯javascript来回答你的问题。这将生成变量pathToFile,它是parent/child/innerchild格式的文件路径。您可以使用文件路径执行任何所需的处理,以自行创建链接。你应该将它放在click()函数内。 编辑:还要确保将变量isFolder设置为是否应该找到文件夹的路径。如果需要查找文件夹的路径,请将其设置为true。如果没有,请将其设置为false。它现在会自动检测它是否找到文件夹或文件的路径并采取相应措施。这是:

var parts=[$(this).get(0).textContent];
for(var curParent=($(this).get(0).classList.contains('nombre')?($(this).get(0).parentNode.parentNode.parentNode):($(this).get(0).parentNode.parentNode));
    curParent.tagName.toLowerCase()!=='div';
    curParent=curParent.parentNode.parentNode
){
    parts.push(curParent.querySelector('.nombre').textContent);
}
parts.reverse();
var pathToFile=parts.join('/');

基本上,它需要当前文件(<li class="file">),找到它的父母(<li class="folder">),找到<span class="nombre">在其中,并将span的文本内容添加到parts(文件夹的所有名称的数组)。然后,它继续这个,直到它一直到文件结构的顶部!

<击> 修改:
如果在运行此代码之前将isFolder变量设置为true,它应该可以使用文件夹,只要它需要查找文件夹的路径
它现在应该能够自动检测它是否找到了文件夹或文件的路径,因此您不再需要设置任何变量

请注意,它未经测试。如果它不起作用,我会很乐意解决它。如果它不起作用,请告诉我发生了什么以及控制台中的任何错误。

我希望我能帮助你!