我有以下代码,我必须在此表上添加分页
<!DOCTYPE html>
<html>
<head>
<title>table</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<style>
.rect {
outline: 1px solid green;
}
</style>
</head>
<body>
<div id="table"></div>
<script>
var data = [{
"name": "a",
"section": 1,
"stars": "d1"
}, {
"name": "b",
"section": 2,
"stars": "d2"
}, {
"name": "c",
"section": 1,
"stars": "d3"
}];
var columns = ['name', 'section', 'stars']
// create table
var table = d3.select("#table").append("table");
var thead = table.append("thead").append("tr");
thead.selectAll("th")
.data(columns)
.enter()
.append("th")
.text(function(d) {
return d;
});
var tbody = table.append("tbody");
data.forEach(function(d, i) {
trow = tbody.append("tr")
trow.selectAll("td")
.data(columns)
.enter()
.append("td")
.append(function(d) {
if (d == "stars") {
return document.createElement('button');
} else
return document.createElement('div');
})
.attr("class", function(d) {
if (d == "section") {
return "rect"
}
})
.text(function(e) {
return d[e]
});
});
</script>
</body>
</html>
如何在d3中添加分页? 我必须为每两行设置分页,请提出解决方案。 我添加了3行数据,但实际数据包含50到100行
答案 0 :(得分:2)
在最简单的级别,您只需控制表格行的可见性/显示。这个例子和你得到的基本一样,它使用两个按钮在一个表中显示十个不同的组 - 没有页面编号,没有限制,没有样式:-) - 但它确实是分页
http://jsfiddle.net/f50mggof/6/
<div id="buttons">
<button id="up">
UP
</button>
<button id="down">
DOWN
</button>
</div>
<table></table>
var dataset = [];
for (var n = 0; n < 100; n++) {
dataset.push ([n, Math.random()*50, Math.random()*30]);
}
var rows = d3.select("table").selectAll("tr").data(dataset)
.enter()
.append("tr")
;
var cells = rows.selectAll("td").data(function(d) { return d; })
.enter()
.append("td")
.text(function(d) { return d; })
;
d3.select("#buttons").datum({portion : 0});
// the chain select here pushes the datum onto the up and down buttons also
d3.select("#buttons").select("#up").on ("click", function(d) {
d.portion -= 10;
redraw (d.portion);
});
d3.select("#buttons").select("#down").on ("click", function(d) {
d.portion += 10;
redraw (d.portion);
})
function redraw (start) {
d3.select("table").selectAll("tr")
.style("display", function(d,i) {
return i >= start && i < start + 10 ? null : "none";
})
}
redraw(0);