I have this listing with some files and folders:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css" />
<ul id="selector-file">
<ul>
<li class="folder">
<i class="fa fa-folder"></i> myfiles
<ul>
<li class="folder">
<i class="fa fa-folder"></i> Backup
<ul>
<li class="folder">
<i class="fa fa-folder"></i> one
<ul>
<li class="file"><i class="fa fa-file"></i> test1.dat</li>
</ul>
</li>
<li class="folder"><i class="fa fa-folder"></i> two</li>
</ul>
</li>
</ul>
</li>
</ul>
</ul>
This generates a tree structure:
Now, I want using jQuery, that when a item is clicked, return its path.
- If I click, in
myfilesoutput:/myfiles/ - If I click, in
oneoutput:/myfiles/Backup/one/ - If I click, in
test.datoutput:/myfiles/Backup/one/test1.dat
and so on.
PS: If its a folder, always add the / at the end.
This is my try:
$('#selector-file').on('click', 'li', function() {
var item = $(this);
var path = [];
if (item.is('.file'))
{
$(this).css("background-color", "#F5F5F5")
path.push(item.text().trim());
} else {
path.push(item.find('> .folder').text().trim() + '/');
}
var parents = item.parents('#selector-file li');
path = parents.map(function() {
return $(this).find('> .folder').text().trim();
}).get().reverse().concat(path);
selectedFile = path.join('/');
console.log(selectedFile)
return false;
})
... but it only returns the clicked item and no the path. Can someone give me a hand?
Here's a JSFiddle: https://jsfiddle.net/7n0h8y2t/
Thank you.
