识别给定数组是d3选择

时间:2016-10-04 06:07:39

标签: javascript d3.js

如何识别给定数组是d3选择。 我试过这个

function Chart(container, data) {
    var isd3Selection = container instanceof Array && typeof container.node === 'function';
    this.container = isd3Selection ? container.node() : container;

    this.data = data;
    this.init();
}

还有其他方法可以找到答案吗?

2 个答案:

答案 0 :(得分:4)

V4方式:

根据documentation

  

d3.selection()

     

选择根元素document.documentElement。此函数还可用于测试选择(instanceof d3.selection)或扩展选择原型。例如,要添加一个方法来检查复选框:

你可以这样测试:

d3.select(document.body) instanceof d3.selection // true

答案 1 :(得分:2)

根据您的D3版本,您可以使用以下其中一项:

V3

正如我answer"d3.selection type check in IE"所述,这需要一些解决方法。由于提供了d3.selection作为扩展选择功能的方法,因此您可以向d3.selection添加一个新属性,任何选择都可以访问该属性,无论是原型还是通过复制属性。

// Include this at the start of your script to include the
// property in any selection created afterwards.
d3.selection.prototype.isD3Selection = true;

d3.select(document.body).isD3Selection;   // true 

V4

从v4开始,选择不仅仅是一个嵌套数组,而是一个JavaScript对象,这将使生活变得更加简单。您可以使用标准constructor属性来检查D3选择:

d3.select(document.body).constructor.name === "Selection"   // true

请注意,这仅适用于O. R. Mapper在其comment中指出的未分化版本的D3。对于v4,首选解决方案应该使用instanceof中列出的{{1}}运算符。