如何强制重新排序jsTree?
How to force re-sort jsTree?
如何强制树重新排序?
我添加了更改排序顺序的菜单 ASC/DESC:
"Sort": {
"separator_before": false,
"separator_after": true,
"label": "Sort",
"action": false,
"submenu": {
"Ascending": {
"seperator_before": false,
"seperator_after": false,
"label": "Ascending",
action: function (obj) {
setSortFunction('asc');
var selector = '#treeview';
var root = $(selector).jstree(true).get_node("1");//get_node("root");
$(selector).jstree(true).sort(root, true);
$(selector).jstree(true).redraw_node(root, true);
}
},
"Descending": {
"seperator_before": false,
"seperator_after": false,
"label": "Descending",
action: function (obj) {
setSortFunction('desc');
var selector = '#treeview';
var root = $(selector).jstree(true).get_node("1");//get_node("root");
$(selector).jstree(true).sort(root, true);
$(selector).jstree(true).redraw_node(root, true);
}
}
}
它更改了 asc/desc 顺序,但我需要使用新顺序重新排序现有树。我尝试按照上面的代码进行操作,但它不起作用。
怎么了?
var sortType = "asc";
$(document).ready(function() {
$("#test").on("changed.jstree", function(e, data) {
}).jstree({
plugins: ['checkbox', 'changed', 'contextmenu', 'sort'],
contextmenu: {
select_node: false,
items: contextMenu
},
checkbox: {
three_state: false
},
sort : function(a, b) {
a1 = this.get_node(a);
b1 = this.get_node(b);
if (sortType === "asc"){
return (a1.text > b1.text) ? 1 : -1;
} else {
return (a1.text > b1.text) ? -1 : 1;
}},
core: {
data: [{
id: "padre1",
parent: "#",
text: "Padre 1",
icon: 'fa fa-star text-warning'
}, {
id: "padre2",
parent: "#",
text: "Padre 2"
}, {
id: "id3",
parent: "padre1",
text: "Figlio 1 di padre 1"
}, {
id: "id4",
parent: "padre1",
text: "Figlio 2 di padre 1"
}, {
id: "id5",
parent: "padre2",
text: "Figlio 1 di padre 2"
}, {
id: "id6",
parent: "id5",
text: "Figlio 1 di figlio 1 di padre 2"
}, {
id: "id7",
parent: "id5",
text: "Figlio 2 di figlio 1 di padre 2"
}, {
id: "id8",
parent: "id5",
text: "Figlio 3 di figlio 1 di padre 2"
}, {
id: "id9",
parent: "#",
text: "Figlio 3 di figlio 1 di padre 2"
}]
}
});
});
function contextMenu(node) {
var items = {};
items.selezionaTutti = {
label: 'Seleziona tutti',
icon: 'fa fa-check-square',
action: function(questo) {
console.log(this);
console.log(questo);
}
}
items.asc = {
"seperator_before": false,
"seperator_after": false,
"label": "Ascending",
action: function (obj) {
setSortFunction('asc');
var selector = '#test';
$(selector).jstree(true).refresh();
}
}
items.desc = {
"seperator_before": false,
"seperator_after": false,
"label": "Descending",
action: function (obj) {
setSortFunction('desc');
var selector = '#test';
$(selector).jstree(true).refresh();
}
}
return items;
}
function setSortFunction(sort){
sortType = sort;
}
如何强制树重新排序? 我添加了更改排序顺序的菜单 ASC/DESC:
"Sort": {
"separator_before": false,
"separator_after": true,
"label": "Sort",
"action": false,
"submenu": {
"Ascending": {
"seperator_before": false,
"seperator_after": false,
"label": "Ascending",
action: function (obj) {
setSortFunction('asc');
var selector = '#treeview';
var root = $(selector).jstree(true).get_node("1");//get_node("root");
$(selector).jstree(true).sort(root, true);
$(selector).jstree(true).redraw_node(root, true);
}
},
"Descending": {
"seperator_before": false,
"seperator_after": false,
"label": "Descending",
action: function (obj) {
setSortFunction('desc');
var selector = '#treeview';
var root = $(selector).jstree(true).get_node("1");//get_node("root");
$(selector).jstree(true).sort(root, true);
$(selector).jstree(true).redraw_node(root, true);
}
}
}
它更改了 asc/desc 顺序,但我需要使用新顺序重新排序现有树。我尝试按照上面的代码进行操作,但它不起作用。 怎么了?
var sortType = "asc";
$(document).ready(function() {
$("#test").on("changed.jstree", function(e, data) {
}).jstree({
plugins: ['checkbox', 'changed', 'contextmenu', 'sort'],
contextmenu: {
select_node: false,
items: contextMenu
},
checkbox: {
three_state: false
},
sort : function(a, b) {
a1 = this.get_node(a);
b1 = this.get_node(b);
if (sortType === "asc"){
return (a1.text > b1.text) ? 1 : -1;
} else {
return (a1.text > b1.text) ? -1 : 1;
}},
core: {
data: [{
id: "padre1",
parent: "#",
text: "Padre 1",
icon: 'fa fa-star text-warning'
}, {
id: "padre2",
parent: "#",
text: "Padre 2"
}, {
id: "id3",
parent: "padre1",
text: "Figlio 1 di padre 1"
}, {
id: "id4",
parent: "padre1",
text: "Figlio 2 di padre 1"
}, {
id: "id5",
parent: "padre2",
text: "Figlio 1 di padre 2"
}, {
id: "id6",
parent: "id5",
text: "Figlio 1 di figlio 1 di padre 2"
}, {
id: "id7",
parent: "id5",
text: "Figlio 2 di figlio 1 di padre 2"
}, {
id: "id8",
parent: "id5",
text: "Figlio 3 di figlio 1 di padre 2"
}, {
id: "id9",
parent: "#",
text: "Figlio 3 di figlio 1 di padre 2"
}]
}
});
});
function contextMenu(node) {
var items = {};
items.selezionaTutti = {
label: 'Seleziona tutti',
icon: 'fa fa-check-square',
action: function(questo) {
console.log(this);
console.log(questo);
}
}
items.asc = {
"seperator_before": false,
"seperator_after": false,
"label": "Ascending",
action: function (obj) {
setSortFunction('asc');
var selector = '#test';
$(selector).jstree(true).refresh();
}
}
items.desc = {
"seperator_before": false,
"seperator_after": false,
"label": "Descending",
action: function (obj) {
setSortFunction('desc');
var selector = '#test';
$(selector).jstree(true).refresh();
}
}
return items;
}
function setSortFunction(sort){
sortType = sort;
}