为什么要以编程方式插入SVG <元素不绘制,除了d3.js
Why are programmatically inserted SVG <tspan> elements not drawn, except with d3.js?
假设我想以编程方式在以下SVG的<text>
元素中插入一个额外的<tspan>
:
<svg width="300" height="500">
<text x="50" y="100">
<tspan x="50">one</tspan>
<tspan x="50" dy="20">two</tspan>
<tspan x="50" dy="20">three</tspan>
</text>
</svg>
这可以用纯JavaScript (.appendChild
)、jQuery (.append
)和d3.js (.append
)来完成。然而,尽管这三种方法都成功地插入了元素,我似乎只能让它实际显示当它被d3.js:
参见此小提琴的简化:http://jsfiddle.net/2NLJY/.
这个行为在我测试过的浏览器中是一致的:Firefox, Chrome和Safari(都是OS X 10.8)。
这是怎么回事?
不能使用createElement来创建SVG元素。SVG元素必须在SVG名称空间中创建,因此需要写入
document.createElementNS("http://www.w3.org/2000/svg", "tspan");
有一个jquery插件,它为jquery添加了允许创建svg元素的功能。
相关文章:
- Html画布绘制速度因画布元素过多而减慢
- 画布-绘制的线,但没有显示在谷歌检查元素
- 在元素上绘制边框,但不捕获事件
- 如何在画布元素上绘制视频
- 绘制DOM元素:鼠标事件会被背景元素混淆
- 未捕获的类型错误:对象#<HTML对象元素>没有方法'重新绘制工作流'
- 使用javascript绘制多个以数组元素为文本中心的圆
- 是否可以指示浏览器首先绘制页面的哪些元素
- 如何在正确的位置绘制画布元素
- 如何确定浏览器何时完成绘制插入的元素
- 在画布元素上动态绘制
- 如何在拉斐尔中获取绘制的矩形元素
- 如何在带有触摸的PhoneGap中的画布元素上绘制
- 为什么ctx.drawImage只将视频元素的一部分绘制到画布上
- 在重新排序DOM时,如何重新绘制和重新组织同位素容器中的元素
- IE没有绘制元素
- 如何在angular JS中绘制元素后更改绑定
- 在另一个元素的子元素下面绘制元素
- d3.js使用极坐标绘制元素
- D3:正确绘制元素,但不向dom添加新数据