我正在玩vis.js,并且已经学会了如何获得当前所选节点的数组。
var TempNodes = network.getSelectedNodes();
我的问题是,getSelectedNodes()数组返回时,所有节点id都是从低到高的数字顺序。。。似乎没有办法判断最后一个选择的节点id是什么或第一个选择的结点id是什么。我只能判断选择了哪个节点id。
有人知道从getSelectedNodes数组中找出第一个或最后一个选定节点id的方法吗?
使用tucuxi提出的概念,我确实想出了一些工作代码来实现这一点。尽管图库西的代码并没有"开箱即用",但他的想法是合理的,值得称赞
这是最终为我工作的代码
var PreviouslySelectedNodes = [];
var SelectedNodesInOrder = [];
network.on('select', function (properties) {
// itterate through each visjs selected nodes and see if any value is not present in our current ordered list
// If it's not already present, push it to the top of our ordered list
var SelectedNodeIDs = network.getSelection().nodes // First get all the visjs selected nodes
// If only one Node is currently selected, then empty the SelectedNodesInOrder array ready for a new set
if(SelectedNodeIDs.length == 1){
SelectedNodesInOrder = [];
}
// Cycle through all current selected visjs nodes
for(var t = 0; t <= SelectedNodeIDs.length; t++){
// cycle through all currently selected ordered nodes in our ordered array
var found = false; flag the default as this node not already in our ordered list
for(var y = 0; y <= SelectedNodesInOrder.length; y++){
if(SelectedNodesInOrder[y] == SelectedNodeIDs[t]){ // This node already exists in our ordered list
found = true;
}
}
// If the current visjs selected node doesn't already exist in the SelectedNodesInOrder, then add it
if(found === false){
SelectedNodesInOrder.push(SelectedNodeIDs[t]);
}
}
console.log(SelectedNodesInOrder); // test by dumping our ordered array list to the console
});
文档特别指出getSelection()
返回一个数组,其中包含选定节点的ID。如果未选择任何节点,则返回一个空数组。所选内容未排序。
由于目前选择多个节点的方法是长按它们,您可以通过收听选择事件来自己保持选择顺序:
var mySelectionOrder = [];
var previouslySelected = {};
network.on('select', function(p) {
var selected = {};
// add newly-selected nodes at end of mySelectionOrder
p.nodes.forEach(function(n) {
if ( ! previouslySelected[n]) { mySelectionOrder.push(n); }
selected[n] = true;
});
// remove newly-unselected entries from mySelectionOrder
mySelectionOrder = mySelectionOrder.filter(
function(e, i, a) { return selected[e]; });
// prepare for next run
previouslySelected = selected;
// output to console to make sure it works
console.log("Selection updated", mySelectionOrder);
});
(编辑以修复JS代码;测试以使用此示例)