优化递归脚本,将SVG元素批量添加到DOM中

Optimize recursive script to bulk add SVG elements to DOM

提问人:Rip 提问时间:1/20/2023 更新时间:1/20/2023 访问量:52

问:

我希望动态地向 DOM 批量添加大量 SVG 元素。

从我所读到的内容来看,动态添加 SVG 元素比使用 SVG 'use' 语句创建多个实例需要更少的处理。

我写了下面的剧本。我是否错过了任何更优化的方法?

或者这种结构可以用更少的迭代来实现吗?

我必须能够以每个元素的直接父元素为目标,以便将其添加到 DOM 结构中。

下面的脚本旨在为数组定义的任意数量的层在每个元素与其下方级别的每个元素之间创建一对多关系。

`console.clear();

newElement = [];

newElement[0] = ["g", "g"];
newElement[1] = ["g", "g", "g"];
newElement[2] = ["g", "g", "g"];
newElement[3] = ["path", "polygon", "path", "polygon"];

coord = [];
Tree(-1, 0);
console.table(coord);

function Tree(f, i) {
  (origf = f),
    (origi = i),
    (tracki = []),
    (trackf = origf + 1),
    (tracki[trackf] = 0);

  coord.push([trackf, tracki[trackf]]);

  while (AddDesc() != "done") {
    AddDesc();
  }
}

function AddDesc() {
  if (trackf == newElement.length - 1) {
    for (
      tracki[trackf] = 1;
      tracki[trackf] < newElement[trackf].length;
      tracki[trackf]++
    ) {
      coord.push([trackf, tracki[trackf]]);
    }
    trackf--;

    for (
      ;
      trackf > origf && tracki[trackf] == newElement[trackf].length - 1;
      trackf--
    ) {}
    if (trackf == origf) {
      return "done";
    }
    tracki[trackf]++;
    coord.push([trackf, tracki[trackf]]);
  }

  if (trackf < newElement.length - 1) {
    trackf = trackf + 1;
    tracki[trackf] = 0;
    coord.push([trackf, tracki[trackf]]);
  }
}`

这是我的第一次尝试。

JavaScript Web 递归 SVG DOM

评论

1赞 chrwahl 1/20/2023
阅读你的代码真的很难。也许你可以添加最终结果 -- 基于你的代码生成的 SVG 元素。
0赞 Rip 1/21/2023
谢谢。这是密码笔。此代码仅在 newElement 数组中为每个元素生成 SVG 类型的坐标。每个元素的类和属性位于其他数组中,每个元素的坐标相同。我还没有把它们放在一起,因为我被困在将每个元素放在 DOM SVG 树中的最佳技术上。我已经为这部分代码正在构建的 SVG 提供了一个代码笔。codepen.io/fcdobbs/pen/oNMoeGa codepen.io/fcdobbs/pen/zYLpRdJ

答: 暂无答案