【发布时间】:2013-12-23 01:26:27
【问题描述】:
使用d3.select('#chart') 选择一个项目不起作用,即使我创建了全局窗口和文档。
使用document.querySelector('#chart') 手动选择它似乎可以以某种方式工作。
jsdom = require('jsdom').jsdom
document = jsdom('<html><head></head><body><div id="chart"></div></body></html>')
window = document.parentWindow
d3 = require('d3')
data = [4, 8, 15, 16, 23, 42]
x = d3.scale.linear().domain([0, d3.max(data)]).range([0, 420])
//works
chartDiv = document.querySelector('#chart')
d3.select(chartDiv).selectAll("div").data(data).enter().append("div").style("width",(d) -> x(d) + "px").text((d) -> d)
//doesn't work
d3.select('#chart').selectAll("div").data(data).enter().append("div").style("width",(d) -> x(d) + "px").text((d) -> d)
有什么遗漏吗? :\
【问题讨论】:
-
您收到的错误信息是什么?
-
当你去寻找
<div id="chart">时,它在 DOM 中吗? -
您在 DOM 中是否有多个带有
id="chart"的 div? (并不是说这可以完全解释这种差异,但这是一个奇怪的错误)。 -
移动 require 是否解决了您的问题?
-
d3 捕获了它自己对
document的引用,如source code 的第11 行所示。据我了解(之前没有尝试过 JSDOM)这是一个问题,因为这个捕获的引用并不指向你的 jsdom 创建的document。你看到this thread了吗? TLDR,但似乎正在讨论您的问题。我还希望将document设为全局,例如global.document = jsdom('...')可能是一种解决方法,但该线程并未声称如此。
标签: node.js d3.js coffeescript