【问题标题】:Putting HTML Table into ToolTip in D3.js在 D3.js 中将 HTML 表格放入 ToolTip
【发布时间】:2014-01-08 07:59:49
【问题描述】:

我创建了一个共现矩阵,当一个被占用的单元格悬停在上面时,它会创建一个工具提示。代码如下:

div.tooltip {
    position: absolute;
    text-align: left;
    width: 500px;
    color:white;
    padding: 8px;
    font: 13px sans-serif;
    background: black;
    border: solid 1px #aaa;
    pointer-events: none;
}

var div = d3.select("body").append("div")
  .attr("class", "tooltip")
  .style("opacity", 0);

function mousemove(d) {
      div
        .html("Tooltip is here")
        .style("left", (d3.event.pageX) + "px")
        .style("top", (d3.event.pageY) + "px")
  }

function mouseover(p) {
    div.transition()
        .duration(300)
        .style("opacity", 1);
    d3.selectAll(".row text").classed("active", function(d, i) { return i == p.y; });
    d3.selectAll(".column text").classed("active", function(d, i) { return i == p.x; });
}

function mouseout() {
    div.transition()
        .duration(300)
        .style("opacity", 1e-6);
    d3.selectAll("text").classed("active", false);
}

然后我的元素调用函数 mousemove、mouseover 和 mouseout。这一切正常,工具提示完美显示。我现在想要做的是当我将鼠标悬停在一个条目上时生成一个表格,并将该表格放在工具提示中。我现在拥有的代码可以正确生成表格,但它没有将其放入工具提示中,而是在矩阵上方或下方生成表格。我正在使用这个函数来生成表格:

  function tabulate(data, columns) {
      var table = d3.select("body").append("table"),
          thead = table.append("thead"),
          tbody = table.append("tbody");

      // append the header row
      thead.append("tr")
          .selectAll("th")
          .data(columns)
          .enter()
          .append("th")
              .text(function(column) { return column; });

      // create a row for each object in the data
      var rows = tbody.selectAll("tr")
          .data(data)
          .enter()
          .append("tr");

      // create a cell in each row for each column
      var cells = rows.selectAll("td")
          .data(function(row) {
              return columns.map(function(column) {
                  return {column: column, value: row[column]};
              });
          })
          .enter()
          .append("td")
              .text(function(d) { return d.value; });

      return table;
  }

谁能给我一些帮助,让我在工具提示中生成表格?

【问题讨论】:

    标签: javascript d3.js html-table


    【解决方案1】:

    目前,

    var table = d3.select("body").append("table")
    

    选择页面的整个正文并附加一个表格元素,使表格出现在页面底部。

    做一个小改动,

    var table = div.append("table")
    

    将获取您的工具提示元素并附加表格,使其出现在工具提示中。 (将工具提示命名为比“div”更具描述性的名称可能是个好主意)

    通常,当鼠标悬停在不同的元素上时,工具提示也需要更新其内容;不过,我认为您不会在这里尝试这样做?

    【讨论】:

    • 实际上,当鼠标悬停在不同的元素上时,我正在尝试更新内容。我认为你给我的东西虽然有效。每次将鼠标悬停在一个元素上时,我都会根据该元素的数据生成一个表格,因此它会动态变化。
    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 2019-09-04
    • 2020-07-31
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多