#javascript #jquery #jstree
#javascript #jquery #jstree
Вопрос:
Итак, моя проблема в том, что мне нужно иметь контекстное меню только для узлов моего дерева, которые вложены после 2-го уровня или глубже. Например :
Я хочу иметь контекстное меню по умолчанию для узлов «1.1.1», «1.1.1.1» и т.д… но я не хочу, чтобы это контекстное меню появлялось, когда я щелкаю правой кнопкой мыши на «1» или «1.1».
Как я должен выбирать, на каких узлах отображаться, а на каких нет?
Я нашел несколько примеров, подобных этому :
function customMenu(node) {
//Show a different label for renaming files and folders
if ($(node).hasClass("jstree-closed") || $(node).hasClass("jstree-open")) { //If node is a folder
var renameLabel = "Rename Folder";
}
else {
var renameLabel = "Rename File";
}
var items = {
"upload" : {
"label" : "Upload File",
"action" : function () { ... }
},
"rename" : {
"label" : renameLabel, //Different label (defined above) will be shown depending on node type
"action" : function () { ... }
},
"delete" : {
"label" : "Delete File",
"action" : function () { ... }
}
};
//If node is a folder do not show the "delete" menu item
if ($(node).hasClass("jstree-closed") || $(node).hasClass("jstree-open")) {
delete items.remove;
}
return items;
}
Мне нужно что-то вроде этого, но я не знаю, как проверить, на каком уровне вложена моя папка. Проверки в моем примере относятся к «папке или файлу».
Кто-нибудь знает?
Ответ №1:
Я не думаю, что у jsTree есть для этого готовый метод, поэтому вы можете отключить отображение меню для узлов на уровне 1 и 2 с помощью кода, как показано ниже. Проверьте демонстрацию — демонстрацию скрипки.
.on('show_contextmenu.jstree', function(e, reference, element) {
if ( reference.node.parents.length < 3 ) {
$('.vakata-context').remove();
}
});