d3.select与document.getElementById

the*_*yup 2 javascript dom d3.js

我无法过渡到工作,因为d3.select()方法不起作用.我通过使用document.getElementId()找到了一种解决方法,并通过手动更改所选DOM元素的属性来应用更改.一切都在浏览器中显示得很好,所以我去控制台做了一些调查.

我发现的是在控制台中,当我输入时

document.getElementId("elementId")
Run Code Online (Sandbox Code Playgroud)

它按预期返回DOM元素,但是当我使用时

d3.select("#elementId")
Run Code Online (Sandbox Code Playgroud)

要么

d3.select("elementId")
Run Code Online (Sandbox Code Playgroud)

它返回以下对象:

>pt {_groups: Array[1], _parents: Array[1]}
Run Code Online (Sandbox Code Playgroud)

有更多了解这个的人可以解释发生了什么,以及如何让d3.select返回实际的DOM对象?

Ger*_*ado 8

d3.select("#elementId")返回D3选择(由于D3 v4.x是对象而不是数组),而不是DOM元素.这是预期的行为.

要获取实际的DOM元素,请使用以下方法node():

d3.select("#elementId").node();
Run Code Online (Sandbox Code Playgroud)

这是一个演示:

var node = d3.select("#foo").node();
var selection = d3.select("#foo");
console.log("node: ", node)
console.log("selection: ", selection)
Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v4.min.js"></script>
<p id="foo">This is a paragraph</p>
Run Code Online (Sandbox Code Playgroud)

  • 这不是**正确(有人甚至低估了你的答案).你确定你在那个页面上只有一个**ID吗?ID必须是唯一的. (2认同)
  • @thewayup不要让Gerardo错了:这是为了挑战你,而不是让你难堪!如果你真的能够设置一个演示支持你的假设,单独通过ID选择将不起作用,我真的鼓励你与社区分享,因为它可能真的很有趣. (2认同)