Javascript工具提示未显示在样式定义的框中

Javascript工具提示未显示在样式定义的框中,javascript,d3.js,tooltip,Javascript,D3.js,Tooltip,我正在做D3树形图。我添加了一个工具提示,应该显示在一个框中(请参见:)。它显示为文本,但不显示在框中。我错过了什么 <HTML> <HEAD> <script type="text/javascript" src="http://d3js.org/d3.v2.js"></script> <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.m

我正在做D3树形图。我添加了一个工具提示,应该显示在一个框中(请参见:)。它显示为文本,但不显示在框中。我错过了什么

<HTML>
<HEAD>
  <script type="text/javascript" src="http://d3js.org/d3.v2.js"></script>
  <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
  <script src="http://labratrevenge.com/d3-tip/javascripts/d3.tip.v0.6.3.js"></script>
  <style type="text/css">
    rect {
      fill: none;
      stroke: #fff;
    }

    rect:hover {
      opacity: 0.5;
    }

    text {
      font-family: "Times New Roman", Times, serif;
      font-size: 12px;
    }
  </style>
  <style>
    body {
      font: 10px sans-serif;
    }

    .d3-tip {
      line-height: 1;
      font-weight: bold;
      padding: 12px;
      background: rgba(0, 0, 0, 0.8);
      color: #fff;
      border-radius: 2px;
    }
    /* Creates a small triangle extender for the tooltip */

    .d3-tip:after {
      box-sizing: border-box;
      display: inline;
      font-size: 10px;
      width: 100%;
      line-height: 1;
      color: rgba(0, 0, 0, 0.8);
      content: "\25BC";
      position: absolute;
      text-align: center;
    }
    /* Style northward tooltips differently */

    .d3-tip.n:after {
      margin: -1px 0 0 0;
      top: 100%;
      left: 0;
    }
  </style>

  <BODY>

    <div id="body"></div>
    <script type="text/javascript">
      var pathJson = {
        "name": "Sample data",
        "children": [{
          "name": "Title 1",
          "size": 1,
          "children": [{
            "name": "Title 1-1",
            "size": 1,
            "children": [{
              "name": "1-1-1",
              "size": 1
            }, {
              "name": "1-1-2",
              "size": 1
            }, {
              "name": "1-1-3",
              "size": 1
            }, {
              "name": "1-1-4",
              "size": 1
            }]
          }, {
            "name": "Title 1-2",
            "size": 1,
            "children": [{
              "name": "1-2-1",
              "size": 1
            }, {
              "name": "1-2-2",
              "size": 1
            }, {
              "name": "1-2-3",
              "size": 1
            }]
          }, {
            "name": "Title 1-3",
            "size": 1,
            "children": [{
              "name": "1-3-1",
              "size": 1
            }]
          }]
        }]
      }
      var w = 600 - 80,
        h = 500 - 100,
        x = d3.scale.linear().range([0, w]),
        y = d3.scale.linear().range([0, h]),
        color = d3.scale.category10(),
        root,
        node;
      var treemap = d3.layout.treemap()
        .round(false)
        .size([w, h])
        .sticky(true)
        .padding([10, 0, 0, 0])
        .value(function(d) {
          return d.size;
        });
      var svg = d3.select("#body").append("div")
        .attr("class", "chart")
        .style("width", w + "px")
        .style("height", h + "px")
        .append("svg:svg")
        .attr("width", w)
        .attr("height", h)
        .append("svg:g")
        .attr("transform", "translate(.5,.5)");
      var tip = d3.tip()
        .offset([20, 0])
        .html(function(d) {
          return "<strong>Project:</strong> <span style='color:red'>" + d.name + "</span>";
        })
      svg.call(tip);
      node = root = pathJson;
      var nodes = treemap.nodes(root)
        .filter(function(d) {
          return !d.children;
        });
      var cell = svg.selectAll("g")
        .data(nodes)
        .enter().append("svg:g")
        .attr("class", "cell")
        .attr("transform", function(d) {
          return "translate(" + d.x + "," + d.y + ")";
        })
        .on("click", function(d) {
          return zoom(node == d.parent ? root : d.parent);
        })
        .on('mouseover', tip.show)
        .on('mouseout', tip.hide);
      cell.append("svg:rect")
        .attr("width", function(d) {
          return d.dx - 1;
        })
        .attr("height", function(d) {
          return d.dy - 1;
        })
        .style("fill", function(d) {
          return color(d.parent.name);
        });
      cell.append("svg:text")
        .attr("x", function(d) {
          return d.dx / 2;
        })
        .attr("y", function(d) {
          return d.dy / 2;
        })
        .attr("dy", ".35em")
        .attr("text-anchor", "middle")
        .text(function(d) {
          return d.name;
        })
        .style("opacity", function(d) {
          d.w = this.getComputedTextLength();
          return d.dx > d.w ? 1 : 0;
        });
      d3.select(window).on("click", function() {
        zoom(root);
      });
      d3.select("select").on("change", function() {
        treemap.value(this.value == "size" ? size : count).nodes(root);
        zoom(node);
      });

      function size(d) {
        return d.size;
      }

      function count(d) {
        return 1;
      }

      function zoom(d) {
        //alert(d.name);
        var kx = w / d.dx,
          ky = h / d.dy;
        x.domain([d.x, d.x + d.dx]);
        y.domain([d.y, d.y + d.dy]);
        var t = svg.selectAll("g.cell").transition()
          .duration(d3.event.altKey ? 7500 : 750)
          .attr("transform", function(d) {
            return "translate(" + x(d.x) + "," + y(d.y) + ")";
          });
        t.select("rect")
          .attr("width", function(d) {
            return kx * d.dx - 1;
          })
          .attr("height", function(d) {
            return ky * d.dy - 1;
          })
        t.select("text")
          .attr("x", function(d) {
            return kx * d.dx / 2;
          })
          .attr("y", function(d) {
            return ky * d.dy / 2;
          })
          .style("opacity", function(d) {
            return kx * d.dx > d.w ? 1 : 0;
          });
        //.style("font-size", function(d) { return kx * d.dx > d.w ? "20px" : "12px";});
        node = d;
        d3.event.stopPropagation();
      }
    </SCRIPT>
  </BODY>
</htmL>

直肠{
填充:无;
冲程:#fff;
}
矩形:悬停{
不透明度:0.5;
}
正文{
字体系列:“泰晤士报新罗马”,泰晤士报,衬线;
字体大小:12px;
}
身体{
字体:10px无衬线;
}
.d3提示{
线高:1;
字体大小:粗体;
填充:12px;
背景:rgba(0,0,0,0.8);
颜色:#fff;
边界半径:2px;
}
/*为工具提示创建一个小三角形延长线*/
.d3提示:之后{
框大小:边框框;
显示:内联;
字体大小:10px;
宽度:100%;
线高:1;
颜色:rgba(0,0,0,0.8);
内容:“\25BC”;
位置:绝对位置;
文本对齐:居中;
}
/*以不同方式设置向北工具提示的样式*/
第三点提示n:之后{
保证金:-1px0;
最高:100%;
左:0;
}
var pathJson={
“名称”:“样本数据”,
“儿童”:[{
“名称”:“标题1”,
“大小”:1,
“儿童”:[{
“名称”:“标题1-1”,
“大小”:1,
“儿童”:[{
“名称”:“1-1-1”,
“尺寸”:1
}, {
“名称”:“1-1-2”,
“尺寸”:1
}, {
“名称”:“1-1-3”,
“尺寸”:1
}, {
“名称”:“1-1-4”,
“尺寸”:1
}]
}, {
“名称”:“标题1-2”,
“大小”:1,
“儿童”:[{
“名称”:“1-2-1”,
“尺寸”:1
}, {
“名称”:“1-2-2”,
“尺寸”:1
}, {
“名称”:“1-2-3”,
“尺寸”:1
}]
}, {
“名称”:“标题1-3”,
“大小”:1,
“儿童”:[{
“名称”:“1-3-1”,
“尺寸”:1
}]
}]
}]
}
var w=600-80,
h=500-100,
x=d3.刻度.线性().范围([0,w]),
y=d3.刻度.线性().范围([0,h]),
颜色=d3.scale.category10(),
根,
节点;
var treemap=d3.layout.treemap()
.round(假)
.尺寸([w,h])
.粘性(真)
.填充([10,0,0,0])
.价值(功能(d){
返回d.size;
});
var svg=d3.选择(#body”).追加(“div”)
.attr(“类别”、“图表”)
.样式(“宽度”,w+“px”)
.样式(“高度”,h+“px”)
.append(“svg:svg”)
.attr(“宽度”,w)
.attr(“高度”,h)
.append(“svg:g”)
.attr(“转换”、“转换(.5、.5)”);
var tip=d3.tip()
.偏移量([20,0])
.html(函数(d){
返回“项目:”+d.name+”;
})
svg.call(tip);
node=root=pathJson;
var nodes=treemap.nodes(根)
.过滤器(功能(d){
返回!d.儿童;
});
var cell=svg.selectAll(“g”)
.数据(节点)
.enter().append(“svg:g”)
.attr(“类”、“单元”)
.attr(“转换”,函数(d){
返回“translate”(“+d.x+”,“+d.y+”);
})
.打开(“单击”,功能(d){
返回缩放(节点==d.parent?根:d.parent);
})
.on('mouseover',tip.show)
.on('mouseout',tip.hide);
cell.append(“svg:rect”)
.attr(“宽度”,函数(d){
返回d.dx-1;
})
.attr(“高度”,功能(d){
返回d.dy-1;
})
.样式(“填充”,功能(d){
返回颜色(d.parent.name);
});
cell.append(“svg:text”)
.attr(“x”,函数(d){
返回d.dx/2;
})
.attr(“y”,函数(d){
返回d.dy/2;
})
.attr(“dy”,“.35em”)
.attr(“文本锚定”、“中间”)
.文本(功能(d){
返回d.name;
})
.样式(“不透明度”,函数(d){
d、 w=this.getComputedTextLength();
返回d.dx>d.w?1:0;
});
d3.选择(窗口)。在(“单击”,函数()上){
缩放(根);
});
d3.选择(“选择”)。打开(“更改”,函数(){
treemap.value(this.value==“size”?size:count)。节点(根);
缩放(节点);
});
功能大小(d){
返回d.size;
}
函数计数(d){
返回1;
}
功能缩放(d){
//警报(d.name);
var kx=w/d.dx,
ky=h/d.dy;
x、 域([d.x,d.x+d.dx]);
y、 域([d.y,d.y+d.dy]);
var t=svg.selectAll(“g.cell”).transition()
.持续时间(d3.event.altKey?7500:750)
.attr(“转换”,函数(d){
返回“translate”(“+x(d.x)+”,“+y(d.y)+”);
});
t、 选择(“rect”)
.attr(“宽度”,函数(d){
返回kx*d.dx-1;
})
.attr(“高度”,功能(d){
返回ky*d.dy-1;
})
t、 选择(“文本”)
.attr(“x”,函数(d){
返回kx*d.dx/2;
})
.attr(“y”,函数(d){
返回ky*d.dy/2;
})
.样式(“不透明度”,函数(d){
返回kx*d.dx>d.w?1:0;
});
//.style(“字体大小”,函数(d){返回kx*d.dx>d.w?“20px”:“12px”;});
节点=d;
d3.event.stopPropagation();
}

一切正常,但您错过了将类添加到
d3.tip()
的步骤,如下所示

.attr('class', 'd3-tip')

var tip=d3.tip()

.attr('class','d3-tip')//谢谢,我知道是这样的,但找不到。
var tip = d3.tip()
  .attr('class', 'd3-tip') // <---- missing this 
  .offset([20, 0])
  .html(function(d) {
    return "<strong>Project:</strong> <span style='color:red'>" + d.name + "</span>";
  });