使用 foreignObject 在 d3js 强制布局中制作 contenteditable 标签并在 Chrome 上拖动

Posted

技术标签:

【中文标题】使用 foreignObject 在 d3js 强制布局中制作 contenteditable 标签并在 Chrome 上拖动【英文标题】:Make contenteditable labels in a d3js force layout with foreignObject and drag on Chrome 【发布时间】:2014-07-31 19:03:26 【问题描述】:

在这里您可以找到带有可编辑标签的图表(使用 SVG foreinobject)。

nodes.append("foreignObject")
        .attr(width: 100, height: 100)
        .append("xhtml:body")
        .append("xhtml:span")
        .attr("contenteditable", true)
        .html(function(d)  return d.name )
        .on("keyup", function(d, i)
                
                    console.log(d3.select(this).text());
                );

http://jsfiddle.net/J9HZ2/

如果我移除阻力,Chrome 和 FF 就可以了。

问题在于它在 Chrome 上无法正常工作。火狐上还行。 一个想法?

谢谢

亚尼克

【问题讨论】:

【参考方案1】:

使用 Chrome v54,感觉就像一个 bug(鼠标左键单击文本节点不会显示输入文本的提示)。不过有一个解决方法:

右键单击文本跨度元素。这会将蓝色选择应用于文本。选择后,您可以开始输入以覆盖现有文本。

编辑完文本后,单击文本范围之外的任意位置。

【讨论】:

以上是关于使用 foreignObject 在 d3js 强制布局中制作 contenteditable 标签并在 Chrome 上拖动的主要内容,如果未能解决你的问题,请参考以下文章

使用 foreignObject 从 svg 获取画布 dataURI 的问题

<foreignObject> 中的 <textarea> 在 Chrome 中按预期处理,但在 Firefox 中没有

inline svg - 如何将浏览器默认样式应用于foreignObject中的xhtml?

SVG foreignObject 中的 Div 失去其位置,在最新的 chrome 版本中不可见(版本 61.0.3163.100 [62 位])

d3js 各种力的仿真

D3JS 的 AngularJS 指令是不是存在?