我尝试使用新的D3selection.join()范例在每个svg中绘制一个随机放置的圆。虽然我可以在选择器中使用id来实现这一点,但我还没有成功地将类用于选择器。由于我没有与每个圆或svg关联的数据,我只是合成了一个长度为所选元素个数的数组。我已经注解掉了返回的enter和update选择器,因为启用它们会导致异常:
TypeError: r.compareDocumentPosition is not a function
at Pt.order (https://cdnjs.cloudflare.com/ajax/libs/d3/5.15.1/d3.min.js:2:14333)
at Pt.join (https://cdnjs.cloudflare.com/ajax/libs/d3/5.15.1/d3.min.js:2:13931)
at addCircle (c:\github\xxxxxxx\xxxxx\wwwroot\testd3.html:48:19)
at HTMLButtonElement.onclick (c:\github\xxxxx\xxxxx\wwwroot\testd3.html:20:36)
第一个
3条答案
按热度按时间dpiehjr41#
该问题是由以下行引起的:
根据
d3.select
文件:选择与指定的选择器字符串匹配的第一个后代元素
若要选取数据系结的所有圆,应该改用
d3.selectAll
。改编片段如下:
第一个
ubby3x7f2#
我能想到的解决这个问题的唯一方法是按照Mehdi的建议使用selectAll(),将选择更改为.svg,并将**.append(circle)移动到更新中。我还发现.data()**是多余的。
第一个
qnakjoqk3#
以下是gitHub的评论:“...您正在从联接的Enter方法返回Enter选择;你需要返回一个实体化的选择代替...",可以得出结论,enter selection 不能直接返回,所以我发现一个选项是使用一个临时选择,源自
.append()
:因此,使用最后一种方法,可以对选择进行自定义更改,添加新的svg子项等。