function Table() { var data; var dispatch = d3.dispatch(chart, "hover"); //var container; function chart(div) { //container = div; var rows = div.selectAll("tr") .data(data, function(d) { return d.data.id }); var rowsEnter = rows.enter() .append("tr"); rowsEnter.append("td").text(function(d) { return d.data.score }) rowsEnter.append("td") .append("a").attr("href", function(d) { return d.data.url }) .text(function(d) { return d.data.title }) rows.exit().remove(); rows.on("mouseover", function(d,i) { dispatch.hover([d]) }) rows.on("mouseout", function(d,i) { dispatch.hover([]) }) } chart.data = function(_) { if(!arguments.length) return data; data = _; //if(container) chart(container); return chart; } return d3.rebind(chart, dispatch, "on"); }