首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >d3.js不能在shadowDOM中工作

d3.js不能在shadowDOM中工作
EN

Stack Overflow用户
提问于 2013-12-13 02:10:02
回答 3查看 3.8K关注 0票数 5

我正在构建一个利用d3.js进行数据可视化的工具。该工具依赖于webcomponentss和shadowDOM。d3.js不能仅通过d3.select在shadowDOM中选择任何节点。有没有办法让d3shadowdom内部工作,还是我遗漏了一些显而易见的东西?

详细情况:

代码语言:javascript
复制
d3.select("#insideShadowDom")

不返回/选择任何内容,只要您有以下内容

代码语言:javascript
复制
<web-component>
#document-fragment
   <div id="insideShadowDom"></div>
</web-component>

澄清一下:shadowDOM是由一个框架生成的。我找到了一种获得初始shadowRoot (注入)的方法。但是,我仍然在想,即使我没有d3返回的句柄,是否可以告诉shadowDOM有关createShadowRoot()的信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-15 18:42:44

虽然DOM选择器不能跨DOM工作,但是您可以通过.webkitShadowRoot属性访问阴影根(至少在Chrome中是这样)。将其传递给d3.select(),您就可以像往常一样选择阴影DOM中的任何元素。

演示这里

票数 3
EN

Stack Overflow用户

发布于 2014-03-02 14:13:16

您可以传入对象--如果需要引用回调中的对象,也可以使用var:

代码语言:javascript
复制
<polymer-element name="my-element">
    <template>
        <div id="foobar"></div>
    </template>
    <script>
        Polymer('my-element', {
            ready: function() {
                var foobar = this.$.foobar;
                someCallback(function() {
                    d3.select(foobar).
                    ...
                }); 
                ...
            }
        });
    </script>
</polymer-element>
票数 5
EN

Stack Overflow用户

发布于 2015-06-11 17:35:45

不过,我知道这是旧的,使用最新的聚合物版本(1.0.0),您可以使用以下方法访问影子dom元素:

代码语言:javascript
复制
<template> ... <div id="elementId"></div> ... </template>


Polymer({
    ready: function() { var svg = d3.select(this.$.elementId).append('svg'; }
});

这将允许您呈现图表并适当地选择影子dom元素。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20557913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档