2015-08-20 3 views
0

Итак, я использую этот пример D3 force layout - .exit().remove() just giving back errors on tick event для создания моей направленной ориентации.d3 удалять узлы, подключенные к щелканному узлу

Теперь мои вопросы есть, когда вы нажимаете правой кнопкой мыши на удалении узла, чтобы изменить функциональность, чтобы вы не удаляли фактический узел, а узлы, связанные с ним определенного типа.

Например, как на изображении ниже, если я нажимаю на A Я хочу удалить все, что является синим и красным, но не удалять красное или синее с c, если я нажму на b, он ничего не удалит.

http://imgur.com/MhPL34P

Я попробовал и мне не удалось.

+1

Ваша проза разбила бы любой грамматический синтаксический анализатор, но, я полагаю, вы спрашиваете, можно ли написать несколько js, которые будут доставлять поведение удаления всех узлов, которые разделяют ссылку с щелчком узла, не удаляя указанный щелкнутый узел. Исходя из этого предположения, ответ на ваш вопрос - да. Если вы хотите дать указания о том, как это сделать, тогда опубликуйте свою попытку и попросите себя сформулировать некоторые конкретные вопросы об этом. –

ответ

0

Кажется, вы хотите иметь выборочный коллапс. То есть некоторые узлы должны разрушаться, но другие не должны. Для этого вам нужно сделать JSON, который указывает, что этот узел никогда не будет разрушаться Выдержки из моей JSON один с Рыжие складная

{ 
    "name": "cluster", 
     "type": "red", 
     "children": [{ 
     "name": "AgglomerativeCluster", 
      "type": "red", 
      "size": 3938 
    }, 

Тот с типом синего не разборный показано ниже

, { 
     "name": "ShortestPaths", 
      "type": "blue", 
      "size": 5914 
    }, 

В функции мыши вы удалите все другие узлы, кроме того, с типом синим, как показано ниже

function click(d) { 
    if (d3.event.defaultPrevented) return; // ignore drag 
    if (!d.collapsed) { 
     d.collapsed = true; 
     d._children = d.children; 
     var openNodes = []; 
     //on collapse remove all nodes except the one with type blue. 
     d.children.forEach(function (d) { 
      if (d.type == "blue") openNodes.push(d); 
     }); 
     d.children = openNodes; 
    } else { 
     d.collapsed = false; 
     d.children = d._children; 
     d._children = null; 
    } 
    update(); 
} 

Полный рабочий код here

Обратите внимание, что в скрипку на мыши узел «кластер» все его дочерние узлы будут разрушаться, кроме узла «mergeEdge», потому что тип синий.

Смежные вопросы