gpt4 book ai didi

javascript - d3.js 访问准备好的文档上的 DOM

转载 作者:行者123 更新时间:2023-11-28 06:27:50 26 4
gpt4 key购买 nike

我是 d3 新手,在可视化加载到页面上后,无法从 DOM 访问元素。我正在尝试更改矩形元素的属性,但由于我不明白的原因,我只能在浏览器的 js 控制台中执行此操作,而不能在带有脚本的 html 文件中执行此操作。

在 stackoverflow 上阅读后,我发现了这个 link建议对我的问题接受的答案是将 js 代码放在“正文底部”,我假设这意味着我也可以将其放在结束 html 标记之后。因此,我尝试将脚本放在 html 标记结束之后,甚至使用了 window.onload 方法,但似乎都不起作用。

我觉得我在基础层面上错过了一些东西,但我对 javascript 也比较陌生。这是代码:

<html>
<head>
<meta charset="utf-8">
<script src="http://d3js.org/d3.v3.min.js"></script>

<script type="text/javascript">
function draw(data) {

var width = 960,
height = 420;

var colorScale = d3.scale.category20c();

var treemap = d3.layout.treemap()
.padding(4)
.size([width, height])
.value(function(d) { return d.size; });

var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append('g')
.attr('class','chart');

var cell = svg.data([data]).selectAll("g")
.data(treemap.nodes)
.enter().append("g")
.attr("class", "cell")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });

cell.append("rect")
.attr("width", function(d) { return d.dx; })
.attr("height", function(d) { return d.dy; })
.style("fill", function(d) { return colorScale(d.name); });

cell.append("text")
.attr("x", function(d) { return d.dx / 2; })
.attr("y", function(d) { return d.dy / 2; })
.attr("text-anchor", "middle")
.text(function(d) { return d.name+" "+d.size+"%"; });

};
</script>
</head>

<body>
<script type="text/javascript">
d3.json("https://dl.dropboxusercontent.com/s/3csp4n28q3lcpqh/data.json", draw);
</script>
</body>
</html>

<script>
window.onload = function ()
{
d3.select("rect").style({fill: "white"});
}
</script>

编辑:

我找到了问题的答案。在绘制函数末尾添加 d3.select 语句使我能够更改样式。我之前这样做过,但不小心将其放在函数闭包之后,因此它没有包含在回调中。这引导我尝试通过等待准备好的文档以 jQuery 的方式修复问题。

我创建了一个 codepen 来共享我最初正在处理的代码和可视化:http://codepen.io/anon/pen/dGdagR

尽管我找到了不同的解决方案来解决我的问题,但我仍然想知道为什么我无法在准备好的文档上使用常规 javascript 访问 DOM。这是 d3 的某种奇怪功能还是我没有正确理解的另一个概念?

最佳答案

尝试在文档准备好后更改元素。现在您正在 window.onload

之后执行此操作

This问题解释了 window.onload 和文档就绪之间的区别。当资源准备就绪时,将触发 window.onload

试试这个片段。

document.addEventListener("DOMContentLoaded", function(e) { 

d3.json("data.json", function(){
draw();
d3.select("rect").style({fill: "white"});
});

});

关于javascript - d3.js 访问准备好的文档上的 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34958827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com