Javascript 下拉列表更改时无法清除d3.js div
我正在使用d3.js创建一些表,这些表是根据用户选择的下拉选项填充的,该选项过滤数据。这很好。 我正在给表格添加脚注。我遇到的问题是,当下拉列表更改时,脚注div不清楚。所以当你选择“A部分”时,你会看到脚注A,b,c。然后,当您选择“第B节”时,脚注d将附加到这些部分。我只想看到那个场景中的脚注d 我添加了d3.select(“#脚注”).remove(); 上面是创建脚注的地方,但这不起作用。 在下拉列表中创建脚注div之前,如何清除脚注div 这是一个扑克牌: 代码如下:Javascript 下拉列表更改时无法清除d3.js div,javascript,d3.js,Javascript,D3.js,我正在使用d3.js创建一些表,这些表是根据用户选择的下拉选项填充的,该选项过滤数据。这很好。 我正在给表格添加脚注。我遇到的问题是,当下拉列表更改时,脚注div不清楚。所以当你选择“A部分”时,你会看到脚注A,b,c。然后,当您选择“第B节”时,脚注d将附加到这些部分。我只想看到那个场景中的脚注d 我添加了d3.select(“#脚注”).remove(); 上面是创建脚注的地方,但这不起作用。 在下拉列表中创建脚注div之前,如何清除脚注div 这是一个扑克牌: 代码如下: <!DO
<!DOCTYPE html>
<html>
<head>
<style>
body{
font-family:Arial, sans-serif;
font-size:14px;
}
table{
border-spacing:0;
padding:0;
}
th{
text-align:left;
font-weight:normal !important;
border-top:1px solid #ddd;
border-left:1px solid #ddd;
border-bottom:1px solid #ddd;
height:25px;
padding-left:5px;
width: 50px;
}
td{
border:1px solid #ddd;
width:30px !important;
height:25px;
padding-left:5px;
}
tr.row-odd,
.row-odd{
background: #eee;
}
</style>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<select size="1" id="sections" type="select" name="style">
<option>SELECT</option>
<option value="a">Section A</option>
<option value="b">Section B</option>
</select>
<div id="content">
</div>
<script>
function filterJSON(json, key, value) {
var result = [];
for (var foo in json) {
if (json[foo][key] === value) {
result.push(json[foo]);
}
}
return result;
}
definitions = {
"a" : "a: footnote 1",
"b" : "b: footnote 2",
"c" : "c: footnote 3",
"d" : "d: footnote 4"
};
var notes="";
var added=[];
d3.json("data3.json", function(json) {
d3.json("footnotes.json", function(foot){
json.forEach(function(d) {
d.year = +d.year;
});
$('#sections')
.on("change", function () {
var section = $(this).val();
data1 = filterJSON(json, 'set', section);
filterFootnotes = filterJSON(foot, 'set', section);
//make an object with footnotes
function merge(data1, filterFootnotes) {
function makeObj(a) {
obj[a.state] = obj[a.state] || {};
obj[a.state][a.year] = obj[a.state][a.year] || {};
Object.keys(a).forEach(function (k) {
obj[a.state][a.year][k] = a[k];
});
}
var array = [],
obj = {};
data1.forEach(makeObj);
filterFootnotes.forEach(makeObj);
Object.keys(obj).forEach(function (k) {
Object.keys(obj[k]).forEach(function (kk) {
array.push(obj[k][kk]);
});
});
return array;
}
var fullData = merge(data1, filterFootnotes);
// add years for select indicator
var nestyr = d3.nest()
.key(function(d) { return d.year; })
.sortKeys(d3.ascending)
.map(data1);
var yearstring = Object.keys(nestyr);
var tableData = [],
states = {};
fullData.forEach(function (d) {
var state = states[d.state];
if (!state) {
tableData.push(state = states[d.state] = {});
}
if ( d.footnote_id ){
state[d.year] = d.value + " <sup class='footnote'>" + d.footnote_id + "</sup>";
if(added.indexOf(d.footnote_id)==-1){
states[d.state]['footnote'] = d.footnote_id;
if(undefined!=definitions[d.footnote_id]){
notes+=definitions[d.footnote_id]+"<br />";
added.push(d.footnote_id);
}
}
} else{
state[d.year] = d.value;
}
states[d.state].State = d.state;
});
yearstring.unshift("State");
// render the table
tabulate(tableData, yearstring);
// add footnotes
d3.select("#footnotes").remove();
var fnotes = d3.selectAll('#content').append('div').attr("id", "footnotes").html(notes);
});
var width = 200, height = 25;
var minInd = d3.min(json, function(d) { return d.value;} )
var maxInd = d3.max(json, function(d) { return d.value;} )
xScale = d3.scale.linear().range([0, width - 10]).domain(d3.extent(json, function(d) { return d.year; })),
yScale = d3.scale.linear().range([height, 0]).domain([minInd,maxInd]),
xAxis = d3.svg.axis().scale(xScale).tickFormat(d3.format('0f')),
yAxis = d3.svg.axis().scale(yScale).orient("left");
}); // close footnotes json
}); // close json
function tabulate(newData, columns) {
d3.select("#table").remove();
var table = d3.select('#content').append('table').attr("id", "table")
var thead = table.append('thead')
var tbody = table.append('tbody');
thead.append('tr')
.selectAll('th')
.data(columns).enter()
.append('th')
.text(function (column) { return column; });
var rows = tbody.selectAll('tr')
.data(newData)
.enter()
.append('tr');
rows.attr("class", function(d, i){ if (i++ % 2 === 0){return 'row-even'}else {return 'row-odd'}});
var cells = rows.selectAll('td')
.data(function (row) {
return columns.map(function (column) {
return {column: column, value: row[column]};
});
})
.enter()
.append('td')
.attr("class", function (d,i) { return columns[i]; })
.html(function (d) { return d.value; });
return table;
};
</script>
</body>
</html>
身体{
字体系列:Arial,无衬线;
字体大小:14px;
}
桌子{
边界间距:0;
填充:0;
}
th{
文本对齐:左对齐;
字体大小:正常!重要;
边框顶部:1px实心#ddd;
左边框:1px实心#ddd;
边框底部:1px实心#ddd;
高度:25px;
左侧填充:5px;
宽度:50px;
}
运输署{
边框:1px实心#ddd;
宽度:30px!重要;
高度:25px;
左侧填充:5px;
}
罗奇,
.行奇数{
背景:#eee;
}
挑选
A节
B节
函数filterJSON(json、键、值){
var结果=[];
for(json中的var foo){
if(json[foo][key]==值){
push(json[foo]);
}
}
返回结果;
}
定义={
“a”:“a:脚注1”,
“b”:“b:脚注2”,
“c”:“c:脚注3”,
“d”:“d:脚注4”
};
var注释=”;
增值=[];
d3.json(“data3.json”,函数(json){
d3.json(“footnotes.json”),函数(foot){
forEach(函数(d){
d、 年份=+d.year;
});
$(“#节”)
.on(“更改”,函数(){
var section=$(this.val();
data1=filterJSON(json,'set',section);
filterFootnotes=filterJSON(脚,'set',部分);
//用脚注做成一个物体
函数合并(data1、filterFootnotes){
函数makeObj(a){
obj[a.state]=obj[a.state]|{};
obj[a.state][a.year]=obj[a.state][a.year]|{};
Object.keys(a).forEach(函数(k){
obj[a.state][a.year][k]=a[k];
});
}
变量数组=[],
obj={};
数据1.forEach(makeObj);
过滤食品。forEach(makeObj);
Object.keys(obj.forEach)(函数(k){
Object.key(obj[k]).forEach(function(kk){
array.push(obj[k][kk]);
});
});
返回数组;
}
var fullData=merge(data1,filterFootnotes);
//为选定指标添加年份
var nestyr=d3.nest()
.key(函数(d){返回d.year;})
.排序键(d3.升序)
.地图(数据1);
var yearstring=Object.keys(nestyr);
var tableData=[],
国家={};
fullData.forEach(函数(d){
var状态=状态[d.状态];
如果(!状态){
push(state=states[d.state]={});
}
如果(d.脚注){
状态[d.year]=d.value+“”+d.footnote_id+“”;
如果(添加索引of(d.脚注_id)=-1){
州[d.state]['footnote']=d.footnote_id;
if(未定义!=定义[d.脚注\U id]){
注释+=定义[d.脚注_id]+“
”;
添加.推送(d.脚注_id);
}
}
}否则{
状态[d.年]=d.值;
}
states[d.state]。state=d.state;
});
年份字符串。取消移位(“状态”);
//渲染桌子
表格(表格数据,年字符串);
//添加脚注
d3.选择(“#脚注”)。删除();
var fnotes=d3.selectAll(“#content”).append('div').attr(“id”,“footnotes”).html(注释);
});
变量宽度=200,高度=25;
var minInd=d3.min(json,函数(d){返回d.value;})
var maxInd=d3.max(json,函数(d){return d.value;})
xScale=d3.scale.linear().range([0,wid