Search code examples
javascriptjqueryhtmlsvgjquery-svg

Replace an SVG element with another on click


Hi I am trying to create some interactive content from inkscape images in the format of SVG. I am loading a SVG file through, svg.load from http://keith-wood.name/js/jquery.svg.js

I want to add an onclick listener to the loaded svg, so that i can load a different SVG once it is clicked. How do I do this? The approach in the comment below failed.

<script type='text/javascript'>
//<![CDATA[
    function drawSwitch(svg) {
        var switchElement = svg.load('./3phase_switch.svg', {
        addTo: true,
        changeSize: true
    });
//switchElement.addEventListener("click", return function(){switchElement.setAttributeNS(null, "fill", "green");}, false);
}

$(window).load(function () {
    $(function () {
        $('#svgbasics').svg({
            onLoad: drawSwitch
        });
    });
}); //]]>
</script>           

Solution

  • This is how I finally did it, I inspected the elements through Chrome dev. tools and found the name of the element in the SVG to use as a target-listener (#layer1). Using the code below i can switch back and forth between two different SVGs

                function drawOpenSwitch(svg){
                var closed=false;
                var changeSwitch = function (){
    
                    $('#layer1').click(function() {
    
                    if(!closed){
                        svg.clear();
                        switchElement=svg.load('./3phase_switch_closed.svg', {onLoad: changeSwitch, addTo: true, changeSize: true});
                    }else{
                        svg.clear();
                        switchElement=svg.load('./3phase_switch.svg', {onLoad: changeSwitch, addTo: true, changeSize: true});
    
                    }
                    closed=!closed;
                    })};
    
    
                var switchElement=svg.load('./3phase_switch.svg', {onLoad: changeSwitch, addTo: true, changeSize: true});
    
                }
    
    
    
                $(window).load(function(){
                $(function() {
                    $('#svgbasics').svg({onLoad: drawOpenSwitch});
                });