使用d3.js,我之后(比如说)父节点的某个值x,我会使用:
d3.select(this.parentNode).datum().x
Run Code Online (Sandbox Code Playgroud)
但是,我想要的是数据(即数据)索引.建议?
谢谢!
我一直在尝试,一步一步地,在 d3.js 可视化中为动态动画转换一些非常漂亮但静态和非 d3 的代码。
(虽然与这个问题没有直接关系,但原始代码“只是”-haha- 接受用户提供的和弦名称,例如“Amaj7”,将其分解为组件音符并显示相关波形。我正在尝试创建一个基于和弦名称数组的过渡驱动动画。)
就我而言,对于实现的每次成功的代码更新(到 d3.js 友好版本),源代码都被保存起来作为与下一个的工作比较。
在代码的当前更新中,我在尝试合并转换时遇到了一个小故障。转换本身得到了很好的证明,并且(通过日志记录)可以看到按预期触发。
在转换期间,所需的属性值更改(要处理的下一个和弦名称以及立即转换的目标)失败。将以前的(工作)版本与当前版本进行比较:
初始创建,两者通用,但在一个单独的文件中,因此元素只能通过 DOM 访问
var input = container
.append("input")
.attr("class", wavebase.animation_type + "_input")
.attr("id", "chordinput")
.attr("type", "text")
.attr("value","Amaj7");
Run Code Online (Sandbox Code Playgroud)
老的
var input = document.getElementById('chordinput');
input.addEventListener('change', inputChanged, false);
inputChanged.call(input);
Run Code Online (Sandbox Code Playgroud)
和(过渡前):
input.setAttribute("value", (waveplot.chordname + "\x0A"));
inputChanged.call(input);
Run Code Online (Sandbox Code Playgroud)
让我们明确一点:上述工作。
新的
var input = container
.select("#chordinput")
input.on('change', inputChanged, false);
inputChanged.call(input);
Run Code Online (Sandbox Code Playgroud)
后来,既不是这个:
input
.transition()
.text(function() {
return (waveplot.chordname + "\x0A");
})
Run Code Online (Sandbox Code Playgroud)
..也不是这个:
input
.transition()
.attr("value", function() {
return (waveplot.chordname + …Run Code Online (Sandbox Code Playgroud)