javascript - 如何在不调用 "transition()"的情况下对 D3 生成的 HTML 表进行排序?

标签 javascript jquery d3.js html-table transition

我试图了解如何在不显式使用 D3“transition()”调用的情况下转换 D3 生成的 HTML 表。

原始代码是Mike Bostock的可排序表:http://bl.ocks.org/mbostock/3719724

大部分代码从 CSV 文件读取数据,将其映射到不同的列标题名称并呈现 HTML 表格:

d3.csv("readme-states-age.csv", function(states) {
  var ages = d3.keys(states[0]).filter(function(key) {
    return key != "State" && key != "Total";
  });

  d3.selectAll("thead td").data(ages).on("click", function(k) {
    tr.sort(function(a, b) { return (b[k] / b.Total) - (a[k] / a.Total); });
  });

  var tr = d3.select("tbody").selectAll("tr")
      .data(states)
    .enter().append("tr");

  tr.append("th")
      .text(function(d) { return d.State; });

  tr.selectAll("td")
      .data(function(d) { return ages.map(function(k) { return d[k] / d.Total; }); })
    .enter().append("td").append("svg")
      .attr("width", 71)
      .attr("height", 12)
    .append("rect")
      .attr("height", 12)
      .attr("width", function(d) { return d * 71; });
});

表格的排序似乎是通过此“单击”回调进行的:

  d3.selectAll("thead td").data(ages).on("click", function(k) {
    tr.sort(function(a, b) { return (b[k] / b.Total) - (a[k] / a.Total); });
  });

我看到对数据记录 (tr) 的结果选择调用了“sort()”函数,但我不明白如何实际应用转换来重新排序表。这似乎就发生了。

有人可以解释一下如何以及为什么可以在不显式调用 d3.transition() 函数的情况下实现排序吗?

最佳答案

enter image description here

有 50 个州 - 下面的代码创建 50 行,并将 50 行中的每一行分别绑定(bind)到 50 行(每行包含不同年龄段的值)

var tr = d3.select("tbody").selectAll("tr")
         .data(states)
         .enter().append("tr");

onclick 函数以列标题的名称(5-13,14-17,18-24...)传递 - 排序函数按降序返回单击的列的值,进而对整个列进行排序行。

d3.selectAll("thead td").data(ages).on("click", function(k) {
    tr.sort(function(a, b) { return (b[k] / b.Total) - (a[k] / a.Total); });
  });

关于javascript - 如何在不调用 "transition()"的情况下对 D3 生成的 HTML 表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429632/

相关文章:

javascript - 如何将焦点设置在 Angular 2 下拉列表的第一个列表项上

jquery - Owl Carousel : Getting index of object that is clicked

javascript - 正则表达式小组赛

java - AJAX:同时两个请求

d3.js - d3.js 中折叠/伸展树(Splay Tree)的子节点?

javascript - 如何修复 <LI> 中用户可以使用大写字母或小写字母的搜索?

javascript - 如何将 HTML append 到控制台日志?

javascript - 来自react-bootstrap的ListGroupItem和Button在同一行

javascript - D3 中带有日期的简单折线图

javascript - 在 d3.js 中使用 tickValues 控制条形位置