JsTree: изменение значка "открыть" для папок с помощью плагина "types"
Легко указать, какой значок должен быть для закрытой папки, используя плагин "types". Но можно ли использовать плагин типов, чтобы указать, как должна выглядеть открытая папка, или я могу сделать это только с помощью CSS (как показано ниже)?
li.jstree-open > a .jstree-icon
{
background:url("folder_open.png") 0px 0px no-repeat !important;
}
5 ответов
Возможное решение состоит в том, чтобы иметь два type
s - один для открытой папки, а другой для закрытой папки. Смена узла type
это просто.
<div id="jstree_menu"></div>
<script>
/* Load menu tree data */
$('#jstree_menu').jstree(
{
'core' : {
'data' : {
'url' : '/jstree-menu-data/index.html',
}
},
'plugins' : [ "types" ],
'types' : {
'default' : {
'icon' : 'fa fa-angle-right fa-fw'
},
'f-open' : {
'icon' : 'fa fa-folder-open fa-fw'
},
'f-closed' : {
'icon' : 'fa fa-folder fa-fw'
}
}
}
);
/* Toggle between folder open and folder closed */
$("#jstree_menu").on('open_node.jstree', function (event, data) {
data.instance.set_type(data.node,'f-open');
});
$("#jstree_menu").on('close_node.jstree', function (event, data) {
data.instance.set_type(data.node,'f-closed');
});
</script>
Элемент @Seventh:
Ваш код в самом вопросе является ответом. Он работает довольно хорошо. Для использования открытого узла
li.jstree-open > a .jstree-icon { background:url("/images/favorites.png") 0px 0px no-repeat !important; }
Для закрытых узлов используйте
li.jstree-closed > a .jstree-icon { background:url("/images/favorites.png") 0px 0px no-repeat !important; }
ура
Если вы, ребята, хотите использовать jQuery и значок начальной загрузки, вот мое решение.
[Примечание: я использую значок начальной загрузки glyphicon-folder-open для открытия папки и значок начальной загрузки glyphicon-folder-close для закрытия папки.]
// bind customize icon change function in jsTree open_node event.
$('#your-jstree').on('open_node.jstree', function(e, data){
$('#' + data.node.id).find('i.jstree-icon.jstree-themeicon').first()
.removeClass('glyphicon-folder-close').addClass('glyphicon-folder-open');
});
// bind customize icon change function in jsTree close_node event.
$('#your-jstree').on('close_node.jstree', function(e, data){
$('#' + data.node.id).find('i.jstree-icon.jstree-themeicon').first()
.removeClass('glyphicon-folder-open').addClass('glyphicon-folder-close');
});
или если вы используете font-awesome:
// bind customize icon change function in jsTree open_node event.
$('#jstree').on('open_node.jstree', function(e, data){
var icon = $('#' + data.node.id).find('i.jstree-icon.jstree-themeicon').first();
icon.removeClass('fa-folder').addClass('fa-folder-open');
});
// bind customize icon change function in jsTree close_node event.
$('#jstree').on('close_node.jstree', function(e, data){
var icon = $('#' + data.node.id).find('i.jstree-icon.jstree-themeicon').first();
icon.removeClass('fa-folder-open').addClass('fa-folder');
});
На сегодняшний день существует функция с именем "set_icon" (см. API), которая позволяет установить значок дескриптора из строки пути или имени класса.
$.jstree.reference('#jstree').set_icon(node, "/assets/contextMenu_icons/folderOpened.png")
Похоже, вам нужно использовать CSS
li.jstree-open[rel=TYPE]{ background:url("openimage.gif") 0px 0px no-repeat !important; }
li.jstree-closed[rel=TYPE]{ background:url("closedimage.gif") 0px 0px no-repeat !important; }
li.jstree-leaf[rel=TYPE]{ background:url("leafimage.gif") 0px 0px no-repeat !important; }
больше информации на форуме jsTree