Search code examples
javascriptleafletcontrols

How can I remove existing control in Leaflet?


My target is delete actual control on the map to create it again with updated data.

I know about control.remove() but to use this function I need first get control object.

That's my control legend basic from L.control:

Leaflet control

And here is the code to create L.control:

function legend(map)
{
    var legend = L.control({position: 'bottomright'});
    
    legend.onAdd = function (map) {

        var elements = [];
        
        map.eachLayer(function(layer){
        if (layer._icon)
        {
            elements.push("svg");
        }
        });
        

            var div = L.DomUtil.create('div', 'info legend'),
                elements,
                labels = [];

            for (var i = 0; i < elements.length; i++) {
                    div.innerHTML +=
                        '<i>'elements[i]'</i><br>';
                        
                }

            return div;
        };

    legend.addTo(map);
}

Thank you.


Solution

  • function legend(map) {
      var legend = L.control({ position: 'bottomright' });
    
      legend.onAdd = function (map) {
    
        var elements = [];
    
        map.eachLayer(function (layer) {
          if (layer._icon) {
            elements.push("svg");
          }
        });
    
    
        var div = L.DomUtil.create('div', 'info legend'),
          elements,
          labels = [];
    
        for (var i = 0; i < elements.length; i++) {
          div.innerHTML +=
            '<i style="' elements[i] '"></i><br>';
    
        }
    
        return div;
      };
    
      legend.addTo(map);
      return legend
    }
    
    const legendInstance = legend(map);
    // remove 
    legendInstance.remove()
    

    you must return and save control instance if you want remove