Javascript 获取选择中元素的类型

Javascript 获取选择中元素的类型,javascript,d3.js,Javascript,D3.js,如何找到d3选择的基础元素 我试过d3.selectelem.node提供整个节点,而不仅仅是元素。我还检查了v5中是否存在a_组,并且我可能从中派生元素。但是有没有更直接的方法呢 编辑 例如 var svg=d3。选择“svg”; renderChartsvg; ... 变量g=d3。选择“g”; renderChartg; 函数renderCharterElement{ //我想在这里找出元素选择是否通过 //是svg还是g,然后采取适当的措施 //element.node为我提供了整个对象

如何找到d3选择的基础元素

我试过d3.selectelem.node提供整个节点,而不仅仅是元素。我还检查了v5中是否存在a_组,并且我可能从中派生元素。但是有没有更直接的方法呢

编辑

例如

var svg=d3。选择“svg”; renderChartsvg; ... 变量g=d3。选择“g”; renderChartg; 函数renderCharterElement{ //我想在这里找出元素选择是否通过 //是svg还是g,然后采取适当的措施 //element.node为我提供了整个对象,而不仅仅是那个特定的元素 如果==svg{ //在这里采取行动 } } 上例中的element.node返回一个对象。例如,在svg的情况下,它在Chrome控制台中看起来是这样的

在我的实际案例中,我有一个必须在SVG元素上绘制的主图表,但我需要在该图表上提供可单击的操作,它将运行相同的图表代码,但使用不同的数据生成一个子图表并将其作为g元素附加


谢谢大家!

有两种方法可以确定DOM元素的类型:

对于任何类型的节点,都可以通过读取来获取节点的名称。在您的示例中:

element.node().nodeName === "svg"   
如果知道节点是元素类型,则可以参考特定接口的属性:

可以使用已知符号访问元素的接口名称:

element.node()[Symbol.toStringTag] === "SVGSVGElement"
最安全的方法是直接将元素的构造函数与DOM接口进行比较:

element.node().constructor === SVGSVGElement
以下是所有上述方法的可执行演示:

常量元素=d3.selectsvg; console.logelement.nodeName==svg; console.logelement.node.tagName===svg; console.logelement.node[Symbol.toStringTag]==SVGSVGElement; console.logelement.node.constructor==SVGSVGElement;
仅供参考,element.node[Symbol.toStringTag]在Safari中返回未定义,我不知道为什么。@Gerardofurtag在这里也这么做。今天的第二个惊喜!悲伤,但真实。。。
element.node().constructor === SVGSVGElement