如何从该文本的 onclick 方法中更改 d3.js 文本输入
How to change d3.js text entry from within that text's onclick method?
我的AngularJS应用程序使用d3.js绘制一个漂亮的图表。
在绘制此图表时,它使用在屏幕上绘制一些文本。我想在有人根据 myCondition
的布尔值单击该文本时更改该文本。我是这样做的:
var nodeEnter = node.enter()
var myLabel = nodeEnter.append("text")
.attr("x", 50)
.attr("dy", "3")
.text("Hello World")
.style("fill-opacity", 0)
.style("cursor", "pointer")
.on("click", function(d) {
if (myCondition)
myLabel.text("Mars");
else
myLabel.text("Venus");
}
);
它有点工作。文本的价值确实从Hello World
变为Mars
或Venus
。但是有一个问题。此代码在递归函数和循环中调用。递归 + 循环使用相同的代码在 SVG 容器上绘制大量此类文本。因此,当我单击此标签时,它不仅会更改我想要的文本。它还更改了其他地方的文本!我不想这样。我该如何预防?
我真的只需要一种方法,我可以从单击函数中处理this
或myself
,以便它知道我在谈论对象。如何?
在不知道您的递归函数和循环的情况下,我将尝试两种不同的方法,我希望其中一种有效。
第一个是将this
用于点击事件:
var myLabel = nodeEnter.append("text")
.attr("x", 50)
.attr("dy", "3")
.text("Hello World")
.style("fill-opacity", 0)
.style("cursor", "pointer")
.on("click", function(d) {
if (myCondition)
d3.select(this).text("Mars");
else
d3.select(this).text("Venus");
}
);
如果这不起作用,您可以尝试将特定类设置为不同的myLabel
文本。这样做,即使您的 SVG 中有多个myLabel
,每个都有一个唯一的类。假设 index
是循环的特定值(如 i
(。因此,您可以尝试:
var myLabel = nodeEnter.append("text")
.attr("x", 50)
.attr("dy", "3")
.attr("class", "myLabel" + index)//index is any value unique for the loop
.text("Hello World")
.style("fill-opacity", 0)
.style("cursor", "pointer")
.on("click", function(d) {
if (myCondition)
d3.selectAll(".myLabel" + index).text("Mars");
else
d3.selectAll(".myLabel" + index).text("Venus");
}
);
相关文章:
- 使用D3.js计算带有字母间距的文本长度
- 仅当变量有值时才显示D3文本标签
- 使用D3将Ticks值更改为文本
- 向d3圆添加文本
- 使用D3.js和GeoJson在地图上显示States上的一些文本
- 在d3.js中显示圆弧末端的文本
- 如何在d3中更新带有附带文本的条形图
- 如何从该文本的 onclick 方法中更改 d3.js 文本输入
- 在 D3 中使用 Tipsy 缩小悬停文本
- 将 d3 演示中的圆圈和文本替换为包含自定义 HTML 和 ko 绑定的 foreignObject
- 水平条形图上的文本 - d3
- D3围绕饼图旋转文本
- 如何在D3中获得可缩放Icicle布局中文本标签的旋转
- 在d3.js中添加文本标签以强制定向图链接
- 在呈现 D3 SVG 对象之前更改引导按钮文本
- 使用d3.js删除svg文本元素
- 为什么可以't我得到了这个d3.js文本的边界框
- D3具有矩形和文本换行的水平树布局
- 如何在 D3.grid 示例中向单元格添加文本 D3-js-building-a-grid-of-矩形
- 如何通过按钮单击和鼠标悬停/鼠标退出显示和隐藏节点文本?D3/JS.