[英]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.