在JavaScript中多次绑定事件侦听器
我正在尝试使用JavaScript逐级获取目录列表。在JavaScript中多次绑定事件侦听器,javascript,jquery,parsing,Javascript,Jquery,Parsing,我正在尝试使用JavaScript逐级获取目录列表。 我将这个路径数组作为输入 var _paths = []; _paths.push("meta1/meta2/test/home/myself/hi.jpg"); _paths.push("meta1/meta2/test/home/myself/hi1.jpg"); _paths.push("meta1/meta2/test/home/myself/hi2.jpg"); _paths.push("meta1/meta2/test/work/
我将这个
路径
数组作为输入
var _paths = [];
_paths.push("meta1/meta2/test/home/myself/hi.jpg");
_paths.push("meta1/meta2/test/home/myself/hi1.jpg");
_paths.push("meta1/meta2/test/home/myself/hi2.jpg");
_paths.push("meta1/meta2/test/work/she/100.jpg");
_paths.push("meta1/meta2/test/work/she/110.jpg");
_paths.push("meta1/meta2/test/work/she/120.jpg");
_paths.push("meta1/meta2/test/work/hard/soft/she/120.jpg");
_paths.push("meta1/meta2/test/work/hard/soft/she/121.jpg");
_paths.push("meta1/meta2/test/work/she/220.jpg");
我想有一个“测试”作为输出,可以点击。单击“测试”后,应将其替换为“主页”和“工作”。点击“家”-“我自己”,点击“工作”-“努力”和“她”
我写道:而且它只工作一次,只在单击“测试”时工作。在绘制目录后,只需重新绑定侦听器即可。你只把它们绑一次,因此它们只能工作一次 将绑定函数包装到命名函数中:
function bindListeners(){
$('.sub').click(function() {
word = $(this).text();
filteredArr = findString(_paths, word);
drawList(filteredArr, word);
});
}
并在提取列表的末尾调用它:
var drawList = function (paths, word) {
var folders = getFolders(paths, word);
if (folders.length > 0) {
$('.canvas').html('');
for (i = 0; i < folders.length; i++) {
$('.canvas').append("<div class='sub'>" + folders[i] + "</div><br />");
}
}
bindListeners();
}
var drawList=函数(路径、字){
var folders=getFolders(路径、单词);
如果(folders.length>0){
$('.canvas').html('');
对于(i=0;i );
}
}
bindListeners();
}
.如果有人对构建数据结构感到好奇:
(function iteratePaths() {
var dirs = [];
for(var i = 0; i < _paths.length; i++) {
buildDirectories(dirs, _paths[i].split('/'));
}
})();
function findDir(dir, obj) {
for(var i = 0; i < dir.length; i++) {
if(dir[i].name === obj.name) {
return dir[i];
}
}
return undefined;
}
function buildDirectories(dir, subs) {
if(subs.length === 0) return;
var obj = {name: subs.shift(), dirs: []};
var existingDir = findDir(dir, obj);
if(!existingDir) {
dir.push(obj);
}
buildDirectories((existingDir || obj).dirs, subs);
}
(函数iteratePath(){
var-dirs=[];
对于(变量i=0;i<_path.length;i++){
构建目录(目录,_路径[i].split('/');
}
})();
函数findDir(dir,obj){
对于(变量i=0;i
是的,我做得不太对,如果子文件夹与父文件夹同名,则此操作可能会失败。不过,它适用于此列表。