Javascript 弦是什么?它是从哪里来的?
在试图理解d3时,我看到了一行Javascript 弦是什么?它是从哪里来的?,javascript,d3.js,Javascript,D3.js,在试图理解d3时,我看到了一行.text(String)。我不明白字符串应该是什么。我认为它可能是一个空字符串(nope),一个方法(我在api引用中没有看到),然后思考它可能是什么 我在下面对它进行了评论,并得到了预期的结果。我不明白的是什么是字符串以及它为什么工作。在这一行中,我的3个方形框有文本(它是稍后将表示的数据的内部值),而注释掉它并没有 Html 它看起来像是一个。根据Matt指出的: 若值是一个函数,那个么将为每个选定的元素(按顺序)计算该函数,并传递当前数据d和当前索引i,该
.text(String)代码>。我不明白字符串应该是什么。我认为它可能是一个空字符串(nope),一个方法(我在api引用中没有看到),然后思考它可能是什么
我在下面对它进行了评论,并得到了预期的结果。我不明白的是什么是字符串以及它为什么工作。在这一行中,我的3个方形框有文本(它是稍后将表示的数据的内部值),而注释掉它并没有
Html
它看起来像是一个。根据Matt指出的:
若值是一个函数,那个么将为每个选定的元素(按顺序)计算该函数,并传递当前数据d
和当前索引i
,该上下文作为当前DOM元素。然后使用函数的返回值设置每个元素的文本内容
因此,您在前面几行将g.data
设置为[50150250]
。每个数字由String
构造函数转换为String对象,返回并用作DOM节点的文本值。看起来d3接受一个以数据为参数的函数:。在这里,数据通过string
@pimvdb转换成字符串:我仍然不知道它应该是什么。这是一个全局函数吗?变量?另外,您的链接实际上没有使用String
…是的,String
是一个全局函数,它以字符串形式返回第一个参数。我认为这是有意义的。。。“如果值是一个函数,则对每个选定元素(按顺序)计算该函数,并传递当前数据d…”调用String(datum)
将强制将其转换为字符串,文本将设置为字符串。@Matt这仍然没有帮助。我在传递字符串,这不像我在写&String(c++)或out String
(c#)。@user1955298:它确实有帮助。我们没有&
作为JavaScript中的引用操作符或任何out
垃圾;我们只是直接传递对象。@Matt:我给自己取了个名字,这样你就可以更好地@me了。我还是不明白。我不是在未定义的情况下通过吗?IIRC更改传递到函数中的变量不会在函数外部更改它。但是,更改对象成员是不同的,因为它不是实际的变量itself@BruteCode:因此,传递此函数告诉d3(根据bfavaretto在其答案中包含的规范),将每个元素的textContent
属性设置为调用String()
,将数据作为参数传递的结果。将数字传递给String()
将以字符串形式返回该数字,这就是您看到的textContent
<div class='chart' id='chart-10'/>
<script src="http://d3js.org/d3.v3.min.js"></script>
var w = 360;
var h = 180;
var svg = d3.select("#chart-10").append("svg")
.attr("width", w)
.attr("height", h);
var g = svg.selectAll(".data")
.data([50,150,250])
.enter().append("g")
.attr("class", "data")
.attr("transform", function(d, i) { return "translate(" + 20 * (i + 1) + ",20)"; });
g.append("circle")
.attr("class", "little")
.attr("r", 1e-6);
g.append("rect")
.attr("x", -10)
.attr("y", -10)
.attr("width", 20)
.attr("height", 20)
.style("fill", "lightgreen")
.style("stroke", "green");
g.append("text")
.attr("dy", ".35em")
.attr("text-anchor", "middle")
;// .text(String);
g.attr("transform", function(d, i) { return "translate(" + 20 * (i + 1) + ",20)"; });
g.select("rect").style("opacity", 1);
g.select("circle").attr("r", 1e-6);
var t = g.transition().duration(750);
t.attr("transform", function(d, i) { return "translate(" + d + ",90)"; });
t.select("circle").attr("r", Math.sqrt);
t.select("rect").style("opacity", 1e-6);