Javascript D3在enter()数据上没有创建具有多个值的div

Javascript D3在enter()数据上没有创建具有多个值的div,javascript,jquery,html,razor,d3.js,Javascript,Jquery,Html,Razor,D3.js,请注意,这不是如何获得酒吧的问题。幸运的是,我已经办到了。这更像是一个“为什么不”的问题。当现实不符合预期时,通常需要吸取教训。此外,基于这些非常有用的评论,我意识到诊断是不正确的,所以我更新了问题 我刚开始用D3做实验。下面的例子,我得到了一些很好的图表。然后,我测试了这一点,只是为了用不太常用的方法积累知识,纯粹是为了学术目的 var graphs = d3.select("#graph").selectAll("div"); graphs.data([1, 2, 3, 4]).enter(

请注意,这不是如何获得酒吧的问题。幸运的是,我已经办到了。这更像是一个“为什么不”的问题。当现实不符合预期时,通常需要吸取教训。此外,基于这些非常有用的评论,我意识到诊断是不正确的,所以我更新了问题

我刚开始用D3做实验。下面的例子,我得到了一些很好的图表。然后,我测试了这一点,只是为了用不太常用的方法积累知识,纯粹是为了学术目的

var graphs = d3.select("#graph").selectAll("div");
graphs.data([1, 2, 3, 4]).enter()
  .append("div").text(function(d){ return d; });
div的数量没有改变。这让我很困惑,因为如果我为每个这样的元素创建一个DIV,我希望增加4。当我修改代码时,它就工作了。然而,我被困在如何排除故障上


我检查了d3.selectgraph是否正好包含一个元素。 我已经从控制台运行了脚本,以避免加载顺序问题。 我的页面是Razor呈现的局部视图。除了jQuery之外的所有其他脚本都被删除了,我需要在页面加载时保留jQuery

...
<div id="#graph" ...></div>
...
@section style{ @Styles.Render("~/Page.css") }
@section script{
  @Scripts.Render("~/Page.js")
  @Scripts.Render("~/Scripts/d3.min.js")
}

我在你的代码中看到三件事。首先,使用选择器d3.graph引用。在HTML的id中有一个尖锐的符号。这就是为什么你看不到元素数量的增加——它们被创建到一个不同的组件中。用这个代替

<div id="graph" ...>

最后一点是关于你的部分。我假设它们是从布局中调用的,并且这只是一个局部视图。如果是,请注意渲染顺序。在布局的不同阶段调用局部视图中的部分渲染可能会产生问题。

@Cyril,好了!这是一个关于D3的错误诊断案例,原因是缺乏能力和过度混淆。请随便看一看。我检查了d3.selectgraph是否正好包含一个元素。您是说它返回一个包含一个元素的数组,还是说该数组的单个成员实际包含一个有用的dom元素?如果我键入d3.selectwithisjfsdopafwdgdfgdfgkl,我会得到返回的数组[1]的结果,只是该数组中的dom元素是null,因为fiddle是OK的,所以我想查看页面的标记。特别是加载脚本的顺序。接下来是@mgraham,如果使用id-graph删除或重命名DIV会发生什么?控制台上没有错误?你的网页是否公开;你能链接它吗?上面的d3代码是否从Page.js运行,d3.min.js是否应该在它之前加载?我已经从控制台运行了脚本,以避免加载顺序问题-这不起作用吗?@Mark,请参阅我的答案。我认为你的观点很有道理,但他在控制台上试过了,但看了看他的DIV的ido。看到了吗?很好,id=graph可能是问题所在。@Mark这是问题之一。但是正如你自己看到的,脚本没有按正确的顺序加载,尽管很容易认为它们是正确的。
@section script{
  @Scripts.Render("~/Scripts/d3.min.js")
  @Scripts.Render("~/Page.js")
}