【问题标题】:How to get d3 instance from d3 selection?如何从 d3 选择中获取 d3 实例?
【发布时间】:2018-04-26 18:10:21
【问题描述】:

我有一个将 d3 选择作为参数的方法:

function foo(selection){

}

在该函数中,我需要 d3 实例。我不想将 d3 实例作为额外参数传递,而是从选择中获取它。这可能吗?

function foo(selection){
    var d3 = selection.getD3();
    var element = document.createElement('div');
    d3.select(element);
}

编辑

选择提供的方法不包括“getD3”之类的东西:

append
attr
call
classed
clone
constructor
data
datum
dispatch
each
empty
enter
exit
filter
html
insert
interrupt
lower
merge
node
nodes
on
order
property
raise
remove
select
selectAll
size
sort
style
text
transition

【问题讨论】:

  • 你能提供更多的上下文吗?在什么情况下调用这个函数?为什么你不能在那个函数中引用d3?这似乎是一个非常特殊的用例;我无法想象有一个实例会导致我的代码出现任何问题。但是,你永远不会知道...
  • 除了上面评论中所说的之外,如果您知道您正在通过 D3 选择,为什么需要这个?我的意思是,您可以使用instanceof d3.selection 进行测试,但我不明白这一点,因为您已经知道了!

标签: javascript d3.js selection


【解决方案1】:

您可以通过将d3 添加到selection 对象来添加对d3 的引用

var mySelection = d3.selectAll('your_selection_criteria');

mySelection.d3_reference = d3;  //mySelection is a JSON object, so
                                // you can attach anything to it

foo(mySelection);


function foo(selection) {
    var myD3 = selection.d3_reference;
    // now myD3 is d3
}

【讨论】:

  • 这项工作当然可以解决。 :) 由于 d3 本身似乎不支持这一点,我决定显式传递 d3 实例。
  • @downvoter 如果您留下评论来解释您选择否决这个答案的原因会很有帮助
猜你喜欢
  • 2018-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 2018-05-15
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多