在 Safari 中访问 SVG 子项

Accessing SVG children in Safari

我使用 ajax 加载一个 SVG 文件并将 SVG 传递给 javascript 函数,如下所示:

var svg = $(xml).find('svg');
map.addSlopeLayer(svg[0]);

在函数内部,我访问了 SVG 的子项:

var gs = svg.children;

这在 Firefox 和 Chrome 中运行良好,但当我在 Safari 中尝试时 svg.children 未定义。

我尝试访问子项的方式是否存在错误,或者是否有其他方法可以在 Safari 中访问它们?

在 Safari 中,尝试在 SVG 元素上读取 children总是 return undefined 这是因为,不幸的是,它是不支持。请尝试使用 childNodes

我实际上在不久前找到了解决方案,但忘记了 post。正如另一个答案中提到的,Safari 根本不支持 SVG 元素的 children 属性 我用来解决这个问题的代码如下:

var svgChildren = svg.children || svg.childNodes;

for (var i=0; i < svgChildren.length; i++){
  if (svgChildren[i].nodeType == 3) continue;

  //do something with the svg elements
}

因为 childNodes 还有 returns 个文本节点,我使用 if (svgChildren[i].nodeType == 3) continue;

过滤掉它们