d3.select by namespaced attribute

时间:2017-06-28 17:11:52

标签: javascript d3.js svg

这几乎适用于我的情况:

d3.select('g[id^="layer"]')

但它不是防弹的。我需要能够做到:

d3.select('g[inkscape:groupmode="layer"]')

这会产生无效的选择器错误。我是否将inkscape添加到d3.namespaces是没有区别的。

P.S。我正在研究Inkscape编辑的SVG,我需要能够在浏览器DOM中渲染它,操纵它并将其导出回SVG,其中命名空间属性中的所有“元数据”都是完整的。

1 个答案:

答案 0 :(得分:0)

我最后使用Element.getAttributeNS进行过滤。

// Set namespace
d3.namespaces.inkscape = 'http://www.inkscape.org/namespaces/inkscape'

// Filter selection
d3.select('#my_svg').selectAll('g').filter(function (d, i) {
    return this.getAttributeNS(d3.namespaces.inkscape, 'groupmode') === 'layer'
})

有没有人知道更像D3的方式呢?