javascript - 附加到 D3 中时元素不出现

标签 javascript html css d3.js

我正在尝试创建一个图例,显示颜色 block 、与该颜色对应的名称以及用于更改颜色的下拉列表。这是我的代码:

function create_legend(){
    var legend = legendSVG.selectAll("g.legend")
    .data(ext_color_domain)
    .enter().append("g")
    .attr("class", "legend");

    var ls_w = 20, ls_h = 20;

    //create color blocks
    legend.append("rect")
    .attr("x", 20)
    .attr("y", function(d, i){ return height - (i*ls_h) - 2*ls_h;})
    .attr("width", ls_w)
    .attr("height", ls_h)
    .style("fill", function(d, i) { return color_scale[i]; })
    .style("opacity", 0.8);

    //create text
    legend.append("text")
    .attr("x", 50)
    .attr("y", function(d, i){ return height - (i*ls_h) - ls_h - 4;})
    .text(function(d, i){ return segment_map[i]; });

    //create dropdown for colors
    legend.append("div")
    .append("select")
    .attr("x", 80)
    .attr("y", function(d, i){ return height - (i*ls_h) - ls_h - 4;})
    .selectAll("option")
    .data(color_names)
    .enter().append("option")
    .attr("value", function (d) { return d; })
    .text(function (d) { return d; });      

}

颜色和文本出现,但下拉元素不出现。

enter image description here

更新:好的,我尝试执行以下操作,但它给了我错误“Uncaught SyntaxError:意外的 token ”

'//create dropdown for colors
    legend.append("foreignObject")
    .attr("class", ".dropdown")
    .append("div")
    .append("select")
    .attr("x", 80)
    .attr("y", function(d, i){ return height - (i*ls_h) - ls_h - 4;})
    .selectAll("option")
    .data(color_names)
    .enter().append("option")
    .attr("value", function (d) { return d; })
    .text(function (d) { return d; });'

最佳答案

在 SVG 中,html 元素只能是foreignObject 元素的子元素,而foreignObject 元素不能是text 元素的子元素。不过,foreignObject 元素可以是文本元素的同级元素,因此您的 DOM 需要如下所示。

g
|-   rect
|-   text
|-   foreignObject
        |- div

关于javascript - 附加到 D3 中时元素不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228337/

相关文章:

html - 如果页面内容不占据 dipsplay 的高度,防止导航链接调整大小

javascript - Angular Material - 向左移动 md-secondary

Javascript: self 和这个

javascript - 动态 DOM 操作函数 : How To Improve It, 我应该使用它吗?它在这里做什么?

javascript - 谷歌地图语言只有英语

标签格式中的 HTML 和 CSS 标签

html - 如果可以的话,我想让我的 flex box 进入 2 x 2 网格帮助

javascript - react +Javascript :-Component will update is getting called too many times causing my application to crash

html - 在标题中制作导航栏时遇到问题

javascript - 在响应式 HTML 中向 PHP 表单添加验证