我想从特定的目录结构中获取路径,如图像上的路径, 如果我点击 chile> citrus> orange 我需要使用“ chile / citrus / orange ”作为路径,这样我就可以在那里创建子目录。我试图在数组中保存元素跨度的每个文本,但它不起作用。
代码
$(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>
答案 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,它应该可以使用文件夹,只要它需要查找文件夹的路径
它现在应该能够自动检测它是否找到了文件夹或文件的路径,因此您不再需要设置任何变量
请注意,它未经测试。如果它不起作用,我会很乐意解决它。如果它不起作用,请告诉我发生了什么以及控制台中的任何错误。
我希望我能帮助你!