Здравствуйте!
Тут наработанные сорцы:
https://bitbucket.org/GerasimovGV/web_scada
Вставляю SVG-фрагменты (подготовленные в редакторе) в соответствующие места (контейнеры) большого SVG (лежит в object но не суть)
1) загружаю фрагмент через XMLHttpRequest с ключом 'image/svg+xml'
в итоге в var content получаю объект svg
2) через foreignObject вставляю фрагмент в большой SVG
Короче меняю на лету фрагменты как хочу, всё вставляется, заменяется новыми фрагментами...НО!!! так как SVG-контейнер и SVG-фрагменты готовятся в одном и том же редакторе MS Visio, то стили фрагментов конфликтуют со стилями контейнера, тупо совпадают имена стилей, и это забавно... но мне надо без этого
Решение: между 1 и 2-шагом должна быть функция, которая сделает "уникальными" имена стилей в SVG-фрагменте, переименует их
Так выглядит SVGшка фрагмента:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="0.23622in" height="0.23622in" viewBox="0 0 17.0079 17.0079" xml:space="preserve" color-interpolation-filters="sRGB"
class="_st3">
<style type="text/css">
<![CDATA[
._st1 {fill:#7f7f7f;stroke:#595959;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
._st2 {fill:#595959;font-family:Calibri;font-size:0.833336em}
._st3 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
]]>
</style>
<g>
<g id="shape1-1">
<rect x="0" y="0" width="17.0079" height="17.0079" class="_st1"/>
<text x="6.19" y="11.5" class="_st2">?</text>
</g>
</g>
</svg>
Стили (_st1, _st2, _st3) находятся в CDATA, и потом встречаются в class элементов.
Так как я получаю вначале SVG в виде строки (потом только преобразую в отбъект), я конечно могу потратить усилия распарсить строку найти все _stx заменить их на (например) _file_name_st1(2,3...)
Но так как у меня есть и готовый SVG DOM-объект, то подскажите пожалуйста, какие есть способы изменить названия стилей заключёных в CDATA?