Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
156
rated 0 times [  158] [ 2]  / answers: 1 / hits: 31351  / 9 Years ago, thu, september 17, 2015, 12:00:00

I am trying to create a SVG tag structure only when or after page loads.



This request may seem strange but this is needed since most of the html markup is generated by a compiled authoring software application so I can't tamper with it. I can only inject javascript to create additional assets (ex: Divs) as needed.



See below for markup. [Portions of html markup have been omitted for clarity.]



<html>
....
<script>
function run() {
var newSvg = document.getElementById('myDiv');
newSvg.outerHTML+='<svg style=position:absolute;z-index:10;margin:0;padding:0;top:0em;left:0.5em onclick=go() width=100 height=100><circle cx=400 cy=400 r=40 stroke=red stroke-width=4 fill=blue />';
}
</script>
<body>
....
<div id=myDiv></div>
....
<script>
run();
</script>
</body>
</html>


If I place the SVG markup in the destination location manually, page and SVG renders properly. If I try to create markup dynamically, I get nothing.



When I view html source after page loads there is no markup for the SVG which should have been created by the function.



I have tried doing via a <body onLoad=run()> event but it also does not work.



Note: This function has worked fine when I need to create a new DIV dynamically.



What am I doing wrong? Thanks in advance to all.


More From » jquery

 Answers
27

what you are doing is perfectly fine. There are some small flaws in your svg wich prevents it from showing up.




  1. as t1nr2y points out, use the propper namespace
    (xmlns=http://www.w3.org/2000/svg)

  2. the svg's height attribute is missing the quotes (height=100)

  3. your svg elements is not closed (missing </svg>)

  4. your circle is way outside your viewport (width=100 height=100 but cx=400 cy=400)





var newSvg = document.getElementById('myDiv');
newSvg.outerHTML += '<svg xmlns=http://www.w3.org/2000/svg style=position:absolute;z-index:10;margin:0;padding:0;top:0em;left:0.5em onclick=go() width=100 height=100><circle cx=40 cy=40 r=40 stroke=red stroke-width=4 fill=blue /></svg>';

<div id=myDiv></div>




[#65022] Wednesday, September 16, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
hasancolec

Total Points: 603
Total Questions: 95
Total Answers: 98

Location: South Korea
Member since Sat, Oct 2, 2021
3 Years ago
;