循环遍历一个节点数组并在每个节点上附加一个子节点只会附加到最后一个元素
Looping through an array of nodes and appending a child to each one only appends to the last element
我想循环遍历一个引用SVG元素的节点数组,并在每个节点上附加一个文本元素,但由于某些原因,所有文本都只出现在数组中的最后一个SVG元素中。
这是代码
var svgs = document.getElementsByTagName('svg');
var moduleNames = ["1", "2", "3", "4", "5"];
var textEl = document.createElementNS(svgns, 'text');
var i = 1;
while(i < moduleNames.length) {
textNode = document.createTextNode( moduleNames[i] );
textEl.appendChild(textNode);
svgs[i].appendChild(textEl);
i++;
}
哦,在我这么做之前,我已经知道SVG元素的数量将与moduleNames数组的长度相同。
谢谢!
文本仅出现在最后一个SVG元素中
不是在最后svg <text>
元素中,而是在only一个中。您正在创建一个元素,并不断向其附加文本节点。将同一元素附加到不同的父元素不会克隆它,只会移动它。
您可能想要创建多个元素:
var moduleNames = ["1", "2", "3", "4", "5"];
for (var i=0; i < moduleNames.length; i++) {
var textEl = document.createElementNS(svgns, 'text'),
textNode = document.createTextNode( moduleNames[i] );
textEl.appendChild(textNode);
svgs[i].appendChild(textEl);
}
看起来您想向每个SVG添加一个新的元素,但您只是在它们之间移动一个,所以它最终会出现在最后一个上。创建元素新副本的最简单方法是使用cloneNode
svgs[i].appendChild(textEl.cloneNode());
相关文章:
- 节点导出返回一个空对象
- 将节点数据分配给另一个变量jstree
- 无法获取vis.js最后一个或第一个选定的网络节点
- 文件的节点自动化移动到另一个文件夹中
- JSTree's data.rslt.obj.text()返回一个文本数组,而不是所需节点的文本
- 使用jQuery+Javascript识别一个空文本节点
- 仅首先需要使用jasmine从节点添加一个文件
- 如果某个值在另一个节点中,我如何每秒自动单击一个链接
- 只需添加一个'允许跨来源请求'到我的节点应用程序工作
- 查找与锁定和更新调度相关的一个或两个节点模块
- XPath以基于另一个节点按位置选择节点's的位置
- 节点发布错误对象的第一个“属性”
- 如何以编程方式在 jsTree 中选择一个节点并打开所有父节点
- 节点模块对象范围:在所有函数之间共享一个对象
- 节点.js将文件从多个目录复制到一个目录
- 在每个循环上完成异步调用,然后转到下一个节点 js
- 选择一个具有纯 js 与C++ 的节点.js库,并在实现上添加
- 在节点中.js“模块”始终是一个对象
- 如何给子节点一个'id'在jtree中使用JSON
- XML DOM中缺少节点——一个简单的示例