我正在尝试访问此this
值,以使当前的DOM元素使用d3.each()
进行迭代,因此我可以相对于当前的{{1 }}。这是代码的简化版本:
rects
rects
我很困惑为什么无法在const oldData = [10,20,30];
const newData = [40,50,60];
let data = oldData;
function update() {
if (data === oldData) {
data = newData;
} else if (data === newData) {
data = oldData;
}
}
const items = d3.select('div')
.append('svg')
.attr('width', 100)
.attr('height', 100)
.selectAll('.items')
.data(data);
items.enter()
.append('rect')
.attr('class', 'items')
.attr('x', (d,i) => 10 * i)
.attr('y', (d,i) => 10 * i)
.attr('width', 5)
.attr('height', 0)
.transition()
.duration(1000)
.attr('height', d => d)
.attr('fill', 'green')
.transition()
.delay(500)
.each(d => {
return d3.select('svg')
.append('rect')
.attr('x', d => d3.select(this).attr('x'))
.attr('y', d => d3.select(this).attr('y') + 5)
.attr('width', 5)
.attr('height', 0)
.attr('fill', 'black')
.transition()
.attr('height', d => d - 5)
})
.merge(items)
.attr('fill', 'blue');
中访问<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<button onclick='update()'>Update</button>
<div></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
</body>
</html>
。我尝试将其this
登录到控制台,并且它总是返回d3.each()
。我尝试了比这更简单的示例,但似乎无法弄清楚。 this
是不是正在迭代当前的DOM元素?
此外,我不确定该更新是否正确。