无法获取vis.js最后一个或第一个选定的网络节点



我正在玩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代码;测试以使用此示例)

最新更新