在 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;
过滤掉它们
我使用 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;