Javascript JsTree-在上下文菜单中排序项目
有没有办法在上下文菜单(context.menu.items)中对项目进行排序?(还包括子菜单项(contextmenu.items.submenu)-如果与上下文菜单不同,则为该子菜单项) 菜单项不会按照代码中的顺序呈现 我在文件中找不到任何关于这方面的信息:Javascript JsTree-在上下文菜单中排序项目,javascript,jstree,Javascript,Jstree,有没有办法在上下文菜单(context.menu.items)中对项目进行排序?(还包括子菜单项(contextmenu.items.submenu)-如果与上下文菜单不同,则为该子菜单项) 菜单项不会按照代码中的顺序呈现 我在文件中找不到任何关于这方面的信息: $.jstree.defaults.contextmenu.items我发现这在jstree中被忽略了。简而言之,似乎没有一个好的、可靠的方法来实现这一点。 你的选择是: 控制您声明上下文菜单项的顺序,并希望您的目标浏览器与您一致。
$.jstree.defaults.contextmenu.items我发现这在jstree中被忽略了。简而言之,似乎没有一个好的、可靠的方法来实现这一点。 你的选择是:
- 控制您声明上下文菜单项的顺序,并希望您的目标浏览器与您一致。
是的,我已经读到您尝试过这个,但是请再次精确地检查您在控制台中看到的内容,而不是在Chrome开发工具上下文菜单中看到的内容。我发现我们在开发工具中看到的顺序与实际的不同。如果有疑问,请调试并暂停上下文菜单“对象最终状态”,然后尝试使用
循环对其属性进行迭代。这也是jstree中幕后发生的事情(见下文)。for…in
如果您的配置从一个全新的对象开始,或者您重用并覆盖从
获得的内容,那么这也非常重要。要完全控制属性定义顺序,请确保从纯对象文字开始,并按照希望的顺序从$.jstree.defaults.contextmenu.items()
中复制所需内容。下面是在顶部显示自定义菜单项“打开”的建议: 在事件处理程序中,考虑分组和分隔符元素,编写自己的重新排序逻辑$.jstree.defaults.contextmenu.items()
$.vakata.context.\u parse
方法中。它将以您构建的上下文菜单对象作为参数,并使用$对其属性进行迭代。每个属性都是,这就是jstree当前所依赖的顺序。现在是这个($。每个
)。MDN对这个循环的看法是它会的。因此,如果浏览器按照声明的顺序执行此操作,那么这是一个令人高兴的巧合,规范没有强制要求这样做。这就是可靠性。。。但如果你能接受这一点,那么在这里也会更容易实现
这种情况下的一个常见解决方案是添加一些排序/权重属性,并在构建上下文菜单时考虑它,但我不认为这是用3.3.4版本实现的。第三种选择是修补jstree实例,如果这是一个可行的解决方案,请自己包含并维护它。
感谢您提供详细的答案。我们已经做了一个变通办法,这样我们就不需要这个了,但希望其他人会觉得这很有用。
"contextmenu": {
"items" : function(node) {
var _ctxmenu = $.jstree.defaults.contextmenu.items();
var ctxmenu = {
"open": {
"label": "Open"
"action" function(){....},
"separator_after" : true,
},
"rename": _ctxmenu.rename,
"remove": _ctxmenu.remove,
};
return ctxmenu;
}
}
$(document).on("context_parse.vakata", function(evt, data){
//process the data.element.children('li') array
})