簡體   English   中英

無法獲取vis.js的最后一個或第一個選定的網絡節點

[英]Cannot get vis.js last or first selected network node

我正在玩vis.js,並研究出如何獲取當前所有選定節點的數組。

var TempNodes = network.getSelectedNodes();

我的問題是getSelectedNodes()數組以從低到高的數字順序返回了所有節點ID ...似乎沒有一種方法可以告訴您最后選擇的節點ID是什么或第一個選擇的節點是什么id是。 我只能告訴您選擇了哪個節點ID。

有誰知道一種方法可以從getSelectedNodes數組中找出第一個或最后一個選定的節點ID是什么?

文檔特別指出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代碼;經過測試可與本示例配合使用

使用tucuxi提出的概念,我確實提出了一些工作代碼來實現這一目標。 盡管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

    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM