I’m using jQuery to add an element to an embedded SVG like this:
var rect = SVG('rect');
$(rect).attr( { x: left,
y: top,
width: right - left,
height: bottom - top,
style: style } );
$(parentElement).append(rect);
parentElement could be for example $(‘g:first’, svgRoot), where svgRoot refers to the embedded SVG element.
function SVG(elementName) {
return document.createElementNS('http://www.w3.org/2000/svg', elementName);
}
This works well, the new rectangle is shown in the browser and added to the DOM:

However, removing this rectangle fails. It is still shown in the browser and present in the DOM:
$(rect).remove();
I also tried
rect.parentNode.removeChild(rect);
which results in the error message “Uncaught TypeError: Cannot call method ‘removeChild’ of null”.
Do you have any idea how I can fix that?
Using jQuery SVG or another plugin/framework is not possible in my project.
I ended up solving this problem using
groups.I ended up with this code :
Where
containeris my mainSVGelement.This is tried and true. Works properly.
EDIT
As pointed out in the comments. You can find this fiddle that works. Similar to your example. It creates 4 rectangles and removes the 2 first ones.
If you want to remove the first element you have to specify this :
Or if you want to do something with ALL of your rectangles you could approach this with something of the sort :
Edit 2
According to last comment, as long as you have the reference to the object, you can use it’s variable to remove it.
This updated fiddle will show you that using
lastRectyou can remove this last rectangle that was added.