D3.js流程图树图如何实现 节点变色及节点连线变色

最近在研究流程图 需求为 节点动态添加    节点树可拖动   缩放   点击折叠节点    危险节点且节点连线变红色

改代码的过程 可谓一把辛酸泪

拖动 缩放 点击折叠节点 在另一篇博客里有写 包括如何调整树图的方向 (由于节点文字太多 相邻文字容易重合 不得不将树图横过来) 

此处指介绍如何 将想要的节点且节点连线变红色

此处为判断节点名称是否一致

如果不判断节点名称 可麻烦后端在返回的节点数据里添加标记 前端判断 是否有该属性即可

D3.js流程图树图如何实现 节点变色及节点连线变色

nodeEnter.append("rect") //此处为 画绿色方块的代码
    .attr("x", function(d) {     
    return 0
    })
    .attr("y", -8)
    .attr("width", function(d) {     
            return d.name.length*16
    })
    .attr("height",25)//高度
    .attr("rx",10)//圆角大小
    .style("fill", function(d){
          if(d.name == '登陆表单**'){
            return "red"
          }else{
            return "green"
          }
      });//在这里控制小方块的背景颜色绿色   d 代表后台数据,判断数据是否为你想要变色的那一个。

  nodeEnter.append("text")//此处为 控制节点文字的代码
    .attr("x", function(d) { return d.name.length*16/2})
    .attr("dy", "10")
    .attr("text-anchor", "middle")//此处为 控制节点文字方向的代码 有middle、start两种方式
    .text(function(d) { return d.name; })
    .style("fill", function(d){
          if(d.name == '登陆表单**'){
            return "#fff"
          }else{
            return "#2dbb8a"
          }
      })//在这里控制文字颜色白色   d 代表后台数据,判断数据是否为你想要变色的那一个。
    .style("fill-opacity", 1);

  link.enter().insert("path", "g")
      .attr("class", function(d){
        if(d.target.name == '登陆表单**'){
          return "isRed"
        }else{
          return "link"
        }
      })//在这里控制连线颜色红色色   d 代表后台数据,判断数据是否为你想要变色的那一个。在css里定义isred   .isRed{
  stroke: #f1602d;
}

      .attr("d", function(d) {
        var o = {x: source.x0, y: source.y0};//YES
        return diagonal({source: o, target: o});  //diagonal - 生成一个二维贝塞尔连接器, 用于节点连接图.
      })
    .attr('marker-end', 'url(#arrow)');