如何使用 d3.js 添加按钮 table 列?

how to add button table column using d3.js?

<html>
<head>
<title>table with sparkline</title>
<script src="d3.min.js"></script>
<style>
.line {
    fill: none;
    stroke: steelblue;
    stroke-width: 1.0px;
}
table {
    border-collapse: collapse;
    width: 100%;
}

th, td {
    padding: 8px;
    text-align: left;
    border-bottom: 1px solid #ddd;
}
th{
    background-color:#f5f5f5;
}
/*tr:hover{background-color:#f5f5f5}
</style>
</head>
<body>
<h4>a table</h4>
<div id="table"></div>
<script>
var columns = ['Fruit', 'Color', 'Lines']

var data = [
    ['Orange', 'Orange', [1,2,3,1,6]],
    ['Apple', 'Red', [6,2,6,5,5]],
    ['Grape', 'Purple', [9,1,2,3,1]]
]

// 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");

var trows = tbody
    .selectAll("tr")
    .data(data)
    .enter()
    .append("tr");

var tcells = trows
    .selectAll("td")
    .data(function(d, i) { return d; })
    .enter()
    .append("td")
    .text(function(d, i) { return d; });

// update (add a column with graphs)
thead.append("th").text('Graphs');

trows.selectAll("td.graph")  
//use a class so you don't re-select the existing <td> elements
          .data(function(d) {return [d[2]];})
          .enter()
            .append("td")
            .attr("class", "graph")
            .each(lines); 


// a sparklines plot
function lines(test) {  
    var width = 100, height = 20; 

    var data = []
    for (i = 0; i < test.length; i++) {
        data[i] = {
            'x': i,
            'y': +test[i]
        }
    }
    
    var x = d3.scale.linear()
        .range([0, width - 10])
        .domain([0,5]);
    
    var y = d3.scale.linear()
        .range([height, 0])
        .domain([0,10]);
    
    var line = d3.svg.line()
                .x(function(d) {return x(d.x)})
                .y(function(d) {return y(d.y)});
    
    d3.select(this).append('svg')
            .attr('width', width)
            .attr('height', height)
         .append('path')
            .attr('class','line')
            .datum(data)
            .attr('d', line);     

}
</script>
</body>
</html>

这是我的代码..我已经使用 d3.js 创建了 table..这里我只想在 column.how 中添加按钮以在每一行的列中添加按钮? 如果我点击按钮,它会显示警告信息 这里我使用了 json 格式的数据

将按钮附加到您的单元格 class:

 var button = $("<button>Button</button>");
 button.click(function() {
    alert("here i have used data in json format : "+JSON.stringify(data));
 });
 button.appendTo(".graph");

这是一个工作示例http://jsbin.com/xogawac/edit?html,output

先做个表头。

thead.append("th").text('Action');

然后在行中添加选择器并传递数据,创建一个 td 然后在那个 td 上创建一个 button 最后注册一个用于点击的侦听器。

trows.selectAll("td.button")  
//use a class so you don't re-select the existing <td> elements
          .data(function(d) {return [d];})
          .enter()
            .append("td")
            .attr("class", "button")
            .append("button")
            .text(function(d){return "Do Something"})
            .on("click", function(d){ console.log(d); alert("hello")});//attach listener

工作代码here