Показать сообщение отдельно
  #1 (permalink)  
Старый 25.04.2018, 17:49
Интересующийся
Отправить личное сообщение для Герасим Посмотреть профиль Найти все сообщения от Герасим
 
Регистрация: 22.09.2017
Сообщений: 24

переименовать название стилей в SVG перед вставкой в другой SVG
Здравствуйте!

Тут наработанные сорцы:
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?
Ответить с цитированием