0
在這個項目中,我做了一個交互式的週期表,它基於一個csv文件。我創建了一個組g,並且我爲每個化學元素提供了一個id。例如:函數select()方法
<g id="element1" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://en.wikipedia.org/wiki/Hydrogen"><rect x="0" y="0" rx="4" ry="4" id="Nonmetal" class="xpos bordered" width="51" height="61" style="fill: rgb(255, 215, 0);"></rect></g>
我繪製了每個元素的卡片,但現在嘗試添加文本。在select方法中,我放置了一個函數來表示每個元素,但它不起作用。是否允許在select()中放置一個函數?還是有另外一個這樣做?
Uncaught TypeError: Cannot read property 'AtomicNumber' of undefined
var newlist = function(csvFile){
d3.csv(csvFile,function(d){
return {
AtomicNumber: d.AtomicNumber,
Element: d.Element,
Symbole: d.Symbole,
....
DisplayRow: d.DisplayRow,
DisplayColumn: d.DisplayColumn,};
},
function(error,data) {
var cards = svg.selectAll(".DisplayRow")
.data(data, function(d) {
return d.DisplayRow+':'+d.DisplayColumn;
});
{
cards.enter()
.append('g')
.attr("id",function(d) {return "element"+(d.AtomicNumber)})
.append("rect")
.attr("x", function(d) { return (d.DisplayColumn - 1) * (gridSize + espacecases); })
.attr("y", function(d) { return (d.DisplayRow - 1) * (gridSize + 10 + espacecases); })
.attr("width", gridSize)
.attr("height", gridSize+10)
}) ;
}
{
d3.select("body").select(function(d) {return ("#element"+d.AtomicNumber);})
.append("text")
.style("font-size",10)
.attr("x", function(d) { return (d.DisplayColumn - 1) * (gridSize + espacecases)+10; })
.attr("y", function(d) { return (d.DisplayRow - 1) * (gridSize + 10 + espacecases)+10; })
.style("text-anchor", "middle")
.text(function(d) { return (d.AtomicNumber) ; });
}
另一種方法可以將代碼塊包裝在'cards.each(function(d){...}'中,然後使用'd3.select(「body」) 。((「#element」+ d.AtomicNumber))'或類似的東西。 – JSBob