我在HTML页面中动态加载多个外部SVG文档并将它们内联附加。 但是在第一个SVG文件中定义的线性梯度“污染”线性梯度在后续SVG文件中使用相同的id定义。这意味着使用ID覆盖的第一个加载的线性渐变覆盖在其他文件中使用相同id定义的其他线性渐变。 当HTML页面中有多个SVG内联时,有关如何沙箱内联SVG的任何想法吗?
注意:在SVG标签周围使用嵌入标签时,它们不会相互“污染”
答案 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");