在HTML页面中动态加载多个SVG文档

时间:2010-06-30 15:49:23

标签: html5 svg

我在HTML页面中动态加载多个外部SVG文档并将它们内联附加。 但是在第一个SVG文件中定义的线性梯度“污染”线性梯度在后续SVG文件中使用相同的id定义。这意味着使用ID覆盖的第一个加载的线性渐变覆盖在其他文件中使用相同id定义的其他线性渐变。 当HTML页面中有多个SVG内联时,有关如何沙箱内联SVG的任何想法吗?

注意:在SVG标签周围使用嵌入标签时,它们不会相互“污染”

3 个答案:

答案 0 :(得分:3)

不幸的是,您必须确保您的ID在整个文档中是唯一的。这是HTML,SVG和任何其他可以像这样混合在一起的标记的限制。

如果您使用服务器端脚本将SVG文件注入HTML标记,那么用唯一的ID替换ID应该不会太糟糕。

您可能还想在这里查看importSvgString()JS函数:http://code.google.com/p/svg-edit/source/browse/trunk/editor/svgcanvas.js?r=1619#7262

答案 1 :(得分:0)

如果您使用SVG注射器使SVG内联,则SVG注射器将解决此问题。 SVGInject向每个内部使用的ID添加随机后缀,以避免冲突(例如,gradient1可能会变成gradient1--inject-HcdE8d27)。

答案 2 :(得分:0)

尝试

var matrixElementos = new Array(30000);
matrixElementos[0]= Snap("#svg");
matrixElem` s`entos[1]= Snap("#svg2");