SVG добавление дочернего элемента
Всем привет!
Есть svg-документ, в нём для некоторых g-элементов требуется загрузить контент из файла. Делаю так :
var content = new DOMParser().parseFromString("<g>"+
" <rect"+
" width='1053.5891'"+
" height='291.32797'"+
" x='-178.22313'"+
" y='0.98392'"+
" id='rect3638'"+
" style='opacity:1;fill:url(#radialGradient3880);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.1880002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1' />"+
"</g>", 'application/xhtml+xml').firstChild
alert( this.childNodes.length )
this.appendChild( new SVGElement( content) )
alert( this.childNodes.length )
this.appendChild( content )
appendChild не работает append тоже не работает... помогите, в чём ошибка ?? |
document.createElementNS('http://www.w3.org/2000/svg', tag)
|
а куда деть content ?
|
а как добавить в него content ?
|
Давно не работал с SVG, обычным innerHTML должно сработать в новый SVG тэг, а потом манипулируйте как хотите.
|
обычным innerHTML не работает...
|
<!DOCTYPE html>
<html>
<head>
<script>
var parser = new DOMParser(), conteiner = parser.parseFromString('\
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">\
<g>\
<rect width="100%" height="100%" fill="red" />\
<circle cx="150" cy="100" r="80" fill="green" />\
<text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text>\
</g>\
</svg>\
', 'text/xml').documentElement.firstElementChild;
document.addEventListener('DOMContentLoaded', function(){
document.getElementById('svg').appendChild(conteiner);
}, false)
</script>
</head>
<body>
<svg version="1.1" baseProfile="full" id="svg" xmlns="http://www.w3.org/2000/svg">
</svg>
<body>
</html>
https://developer.mozilla.org/en/SVG...etting_Started https://developer.mozilla.org/en/DOMParser |
так вроде бы правильнее, только работать перестало :D
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" id="svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<script type="text/ECMAScript" language="javascript">
var parser = new DOMParser(), conteiner = parser.parseFromString('\
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">\
<g>\
<rect width="100%" height="100%" fill="red" />\
<circle cx="150" cy="100" r="80" fill="green" />\
<text x="150" y="125" font-size="60" text-anchor="middle" fill="white">SVG</text>\
</g>\
</svg>\
', 'text/xml').documentElement.firstElementChild;
document.addEventListener('DOMContentLoaded', function(){
alert(document.getElementById('main'))
document.getElementById('main').appendChild(conteiner);
}, false)
</script>
<g id="main">
<rect width="300" height="100"
style="fill:rgb(0,0,255);stroke-width:1;
stroke:rgb(0,0,0)"/>
</g>
</svg>
|
Во первых у меня изначально это HTML документ, а у тебя SVG. Во вторых если у тебя и так SVG документ, зачем парсить строки, разве нельзя создать просто ноды? В третих майм тайп для JS - "text/javascript".
|
мне нужно редактировать именно svg-документ
подгружать контент для нод динамически нужно для ускорения работы если в доке 1000 нод, то не обязательно они все и сразу понадобятся поэтому подгружать необходимо только те, к которым обращается пользователь |
| Часовой пояс GMT +3, время: 10:17. |