在Safari中访问SVG子项

Accessing SVG children in Safari

本文关键字:SVG 子项 访问 Safari      更新时间:2023-12-16

我用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属性,我用来解决这个问题的代码如下:

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也返回文本节点,我使用if (svgChildren[i].nodeType == 3) continue; 将其过滤掉

在Safari中,尝试在SVG Elmeent上读取children将始终返回undefined,因为遗憾的是,它不受支持。请尝试使用childNodes