Откройте макет дерева d3, чтобы показать узел, который искал пользователь, введя запрос в поле поиска.

Я использую схему дерева Майка Бостока в качестве основы для дерева с возможностью поиска. . Мне интересно, может ли пользователь ввести имя в поле поиска, а дерево открыть свои узлы для именованного узла, если оно найдено в дереве.

`{
  "name": "flare",
  "children": [
     {
      "name": "analytics",
      "children": [
         {
          "name": "cluster",
          "children": [
             {"name": "AgglomerativeCluster", "size": 3938},
             {"name": "CommunityStructure", "size": 3812},
             {"name": "HierarchicalCluster", "size": 6714},
             {"name": "MergeEdge", "size": 743}
           ]
         },
         {
          "name": "graph",
          "children": [
             {"name": "BetweennessCentrality", "size": 3534},
             {"name": "LinkDistance", "size": 5731},
             {"name": "MaxFlowMinCut", "size": 7840},
             {"name": "ShortestPaths", "size": 5914},
             {"name": "SpanningTree", "size": 3416}
           ]
         },
         {
          "name": "optimization",
          "children": [
             {"name": "AspectRatioBanker", "size": 7074}
             ]
         }
     ]
}, ...etc`

Так, например, все узлы закрыты, на экране отображается только корневой узел «flare», и пользователь ищет «MergeEdge», который находится как конечный узел в «кластере», который находится в «аналитике». Затем дерево будет открывать только те узлы, которые необходимы для отображения дочерних элементов «кластера», потому что именно там был найден «MergeEdge». Я пробовал с jsonpath.js, но не очень далеко продвинулся и с ответом на этот вопрос, который я получал, возвращается, но только когда узлы открыты, отображая тот, который я ищу.

Я хочу использовать разные файлы json, которые могут иметь слишком много узлов, чтобы отображать их все сразу.


person michael    schedule 26.06.2012    source источник


Ответы (1)


Если ваш код основан на коде из примера, на который вы ссылаетесь, то этот должно быть довольно просто.

Когда страница загружается изначально, вызовите функцию toggle для каждого узла, чтобы убедиться, что все дочерние элементы скрыты. Теперь, когда все узлы, кроме корня, скрыты, вам нужно использовать атрибут _children каждого узла, чтобы найти дочерние узлы. Как только вы найдете дочерний элемент, который соответствует искомому имени, вызовите для него toggle, и каждый родитель вернется к корню. Чтобы повторно отобразить график с переключенными узлами, вызовите update.

person Brant Olsen    schedule 20.07.2012