突出显示根目录的父路径

2024-01-25

我尝试通过更改节点和链接的填充来突出显示从鼠标所在的节点到根节点的路径。我正在使用 Mike's 的 Radial Tidy TreeBlock https://bl.ocks.org/mbostock/4063550.

我尝试过node.ancestors(),但这不被识别为函数。 当我尝试创建一个变量并放置node.parent在其中,或使用d3.select(this.parentNode)它也不起作用。

我在 Google 网上论坛上发现有人试图做相反的事情,迈克·博斯托克 (Mike Bostock)告诉他们 https://groups.google.com/forum/#!msg/d3-js/Cw94911QIB4/E818lrkTa_AJ问题出在他的树数据上。

我使用了迈克提供的方法,效果非常好:

node.on("mouseover", function(p) {

  //color the links
  link.filter(function(d) {
    for (d = d.source; d; d = d.parent) {
      if (d === p) return true;

      }
  }).style("stroke","black");

  //color the nodes 
  node.filter(function(d) {
    while(d = d.parent){
      if(d === p) return true ;
    }
  }).style("fill","red");

});

它改变了颜色,我也做了相反的事情mouseout。 但我无法以相反的方向配置它(节点到父级到根),有人可以帮助我吗?


您需要一种稍微不同的方法来使节点从子节点移动到根节点。我想到的一个选择是收集链中所有节点的列表:

node.on("mouseover", function(p) {

    var nodes = [];
    nodes.push(p);

    while(p.parent) {
        p = p.parent;
        nodes.push(p);
    }

由于具有父级的每个节点都有一个包含其父级对象的属性,因此这将获得所选节点上游的每个节点。鼠标悬停的节点也被选中,这将允许我们选择链接。

现在要设置节点样式很容易,只需查看节点的数据是否位于我们刚刚创建的节点数组中即可:

  node.filter(function(d) {
        if(nodes.indexOf(d) !== -1) return true;
  }).style("fill","steelblue");

为了给节点着色,我们使用类似的方法,但检查每个链接的目标是否在我们的节点数组中:

  //color the links
  link.filter(function(d) {
     if(nodes.indexOf(d.target) !== -1) return true;
  }).style("stroke","orange");

必须是目标 - 因为每个节点只有一条路径终止,但每个节点可能有几条路径起始,这就是为什么我们需要将原始节点的数据推入数组

Here's https://bl.ocks.org/Andrew-Reid/6d75b1ab444f5eda554e6bf8a1b4070b仅突出显示上游的设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

突出显示根目录的父路径 的相关文章

  • goJS 下拉菜单删除项目

    我有简单的 python Flask goJS 图形应用程序 如下所示 节点和链接文本的源是从应用程序的后端加载的 我将它们设置为model modelData像这样的部分 var graphDataString JSON parse di
  • 使用 vanilla JavaScript 将事件绑定到动态创建的 HTML 元素 [无 jquery] [重复]

    这个问题在这里已经有答案了 我需要将事件附加到动态创建的元素 借助 jQuery 我可以使用以下代码对此进行归档 body on click my element function 如果我添加一个新的 my element 它会自动附加事件
  • Web SQL 将数据插入多行

    我尝试在 Web SQL 数据库中一次将变量插入多行 但使用我所知的所有方法时 我收到错误 INSERT INTO tab a b VALUES v1 v2 v3 v4 gt gt could not prepare statement 1
  • 如何将变量传递给函数引用?

    在 React Native 中 当你有需要在渲染时运行并且必须传递变量的函数时 大多数人建议应该使用 onPress gt this functionName variable 然而 当处理大型列表和复杂组件时 您必须优化代码 为每个 r
  • .map() Javascript ES6 地图?

    你会怎么做 本能地 我想做 var myMap new Map thing1 1 thing2 2 thing3 3 wishful ignorant thinking var newMap myMap map key value gt v
  • 将对象传递给jquery中的回调函数

    我最近正在开发小型聊天模块 该模块需要不断检查服务器是否有新消息 我正在向服务器发送 ajax 请求 服务器将保持连接 直到找到新消息 长轮询 Code var chatController function other variable
  • jqGrid如何将额外的类应用于标题列

    我想在特定列上应用一个额外的类 我知道通过在 colModel 中指定这一点对于行是可能的 但这些类仅应用于 结果行 中的列 而不应用于标题 我想要达到的是通过简单的类名隐藏较小视口的特定列 与 Twitter Bootstrap 一起使用
  • 我可以在 Express POST 请求中进行 DOM 操作吗?

    我正在使用基本的 HTML CSS 前端 目前有一个登陆页面 上面有一个表单 可将 一些数据发送到数据库 当请求完成后 它期待某种响应 在这种情况下 我正在重新渲染页面 但是 我想用某种感谢消息替换表单 以便用户知道它已正确发送 我尝试过简
  • Firestore onSnapshot() 方法多次触发

    我有一个带有多个路由和 vuex 的 vue cli 4 应用程序 Firestore 数据库已成功连接 我的应用程序立即反映从 Firestore 控制台应用于数据库的修改 在离开包含与 Firestore 同步 的组件的路线然后返回后
  • 使用 document.getElementById().style.height javascript 从 css 获取值

    请提供有关这个谜团的见解 我试图通过以下方式从 div 框中获取高度值 var high document getElementById hintdiv style height alert high 如果该属性包含在 div 标记中 我可
  • 在 AMP 中包含自定义 JavaScript 的最佳方式

    我阅读了有关脚本标记的所有文档 但找不到如何在 AMP HTML 中包含自定义 JavaScript 我知道
  • Google 将用于 Google 可视化的文件保存在哪里?我可以将其设置为我网站的本地文件吗?另外,有没有让仪表在 IE 中工作的代码示例?

    EDIT请在此处查看生成的 html 和 Javascript http jsfiddle net GregMcNulty K6Vrb 1 http jsfiddle net GregMcNulty K6Vrb 1 根据这个评论4 http
  • 解析器阻塞与渲染阻塞

    我一直在阅读有关优化网络性能的 Google 开发人员文档 我对那里使用的术语有点困惑 CSS 和 JavaScript 文件都会阻止 DOM 构建 但是 CSS 被称为渲染阻塞 而 JavaScript 被称为解析器阻塞 解析器阻塞 和
  • 添加 sigma.js 导航按钮

    我是 javascript 和 sigma js 的新手 我试图让导航按钮在画布中向上 向下 向左 向右滚动 就像发现的那样here http jcml fr jacomyal osdc2012 demo 到目前为止 我有一个简单的例子 我
  • JavaScript IDE/编译器

    现在 我希望你们中的一些人能够理解我的要求 我是编程新手 我在 Codecademy com 上了解了 JavaScript 我使用 labs codecademy com 来编写 JavaScript 但它有限制 对于编程新手来说 我可以
  • 使用 puppeteer 部署 firebase 功能时说即使我启用了 --no-sandbox 也找不到 chrome

    我正在尝试将 firebase 函数部署到使用 puppeteer 的 firebase 项目 我让它在本地计算机上运行 但是当它尝试在 firebase 上运行时 我收到此错误 Exception from a finished func
  • Dojo require,模块加载失败时连接错误

    当我尝试加载不存在的模块时 它失败并出现 404 错误 当然 我想处理此错误 但不知道如何连接到 错误 事件 根据 Dojo 文档 我应该能够使用它的微事件 API http livedocs dojotoolkit org loader
  • 尝试将 jquery 加载到 tampermonkey 脚本中

    我正在编写一个脚本 在加载登录页面时登录到我的大学网络 代码如下 UserScript name My Fancy New Userscript namespace http use i E your homepage version 0
  • 比较两棵树的伪代码

    这是我遇到过几次的问题 并且不确信我使用了最有效的逻辑 例如 假设我有两棵树 一棵是文件夹结构 另一棵是该文件夹结构的内存 模型 我希望比较两棵树 并生成一棵树中存在的节点列表 而不是另一棵树中存在的节点列表 反之亦然 是否有公认的算法来处
  • 如何让JS变量在页面刷新后保留值? [复制]

    这个问题在这里已经有答案了 是否可以永久更改 JavaScript 变量 例如 如果我设置变量 X 并使其等于 1 然后按钮的 onClick 将该变量更改为 2 如何使该变量在刷新页面时保持为 2 这是可能的window localSto

随机推荐