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

Cannot get vis.js last or first selected network node

我正在玩 vis.js 并且已经弄清楚如何获取所有当前选定节点的数组。

<code>var TempNodes = network.getSelectedNodes();

我的问题是返回 getSelectedNodes() 数组时所有节点 ID 的数字顺序从低到高...似乎没有办法判断最后选择的节点 ID 是什么或第一个选择的节点 ID 是什么。我只能知道选择了哪个节点 ID。

有谁知道从 getSelectedNodes 数组中找出第一个或最后一个选定节点 ID 的方法吗?

documentation 具体说明 getSelection()

Returns an array with the ids of the selected nodes. Returns an empty array if no nodes are selected. The selections are not ordered.

因为目前select多个节点的方法是long-press他们,你可以通过听select自己保持selection-order离子事件:

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 代码;经过测试可与 this example 一起使用)

使用 tucuxi 提出的概念,我确实想出了一些工作代码来实现这一点。 tucuxi的代码虽然不行'straight out of the box'他的思路是对的,值得表扬

这是最终为我工作的代码

 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

    });