Placing controls outside map container with Leaflet?How to put a Leaflet control outside?Placing easyButton outside LeafletHow to create a layer switcher in leafletDisplay a control (zoom bar) outside map container in Leaflet?Make Leaflet Map Background TransparentCustom HTML Within Leaflet MapReset leaflet routing machine route and controlsLeaflet Map not VisibleIs it possible to have a Leaflet control with large images / iconsLeaflet Layer ControlsPlacing easyButton outside LeafletHow to put a Leaflet control outside?

Can I legally use front facing blue light in the UK?

Is a car considered movable or immovable property?

Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?

What is the meaning of "of trouble" in the following sentence?

Why is my log file so massive? 22gb. I am running log backups

Finding files for which a command fails

Eliminate empty elements from a list with a specific pattern

Check if two datetimes are between two others

What is the command to reset a PC without deleting any files

What's the difference between repeating elections every few years and repeating a referendum after a few years?

Can a planet have a different gravitational pull depending on its location in orbit around its sun?

Why is the design of haulage companies so “special”?

Information to fellow intern about hiring?

What happens when a metallic dragon and a chromatic dragon mate?

Where to refill my bottle in India?

When blogging recipes, how can I support both readers who want the narrative/journey and ones who want the printer-friendly recipe?

Is Social Media Science Fiction?

Patience, young "Padovan"

Could a US political party gain complete control over the government by removing checks & balances?

Crop image to path created in TikZ?

Is domain driven design an anti-SQL pattern?

How can I add custom success page

How to make payment on the internet without leaving a money trail?

Prime joint compound before latex paint?



Placing controls outside map container with Leaflet?


How to put a Leaflet control outside?Placing easyButton outside LeafletHow to create a layer switcher in leafletDisplay a control (zoom bar) outside map container in Leaflet?Make Leaflet Map Background TransparentCustom HTML Within Leaflet MapReset leaflet routing machine route and controlsLeaflet Map not VisibleIs it possible to have a Leaflet control with large images / iconsLeaflet Layer ControlsPlacing easyButton outside LeafletHow to put a Leaflet control outside?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








11















Can someone tell me how I can place controls outside of the map content with Leaflet?



In this case, I just want to place the layer switch control outside the map object.



enter image description here










share|improve this question






























    11















    Can someone tell me how I can place controls outside of the map content with Leaflet?



    In this case, I just want to place the layer switch control outside the map object.



    enter image description here










    share|improve this question


























      11












      11








      11


      4






      Can someone tell me how I can place controls outside of the map content with Leaflet?



      In this case, I just want to place the layer switch control outside the map object.



      enter image description here










      share|improve this question
















      Can someone tell me how I can place controls outside of the map content with Leaflet?



      In this case, I just want to place the layer switch control outside the map object.



      enter image description here







      leaflet






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Mar 25 '16 at 20:01









      PolyGeo

      53.9k1781245




      53.9k1781245










      asked Mar 22 '16 at 15:16









      mauricio santosmauricio santos

      162210




      162210




















          1 Answer
          1






          active

          oldest

          votes


















          17














          Leaflet does a lot of hand-waving to hide implementation of the map portal but lucky for you they have thought of a solution!



          The getContainer function is just what you need.
          This returns the actual HTML node, not just the markup.



          It is then just as easy as un-childing(?) the node and assign it to a new parent, with a couple lines of Javascript.



          Working example and comments (and a kick-ass tileset)!



          http://codepen.io/romahicks/pen/ONmPmp



          The Code



          //Create Layer
          var baseMap = new L.TileLayer('http://s.tiles.mapbox.com/v3/gvenech.m13knc8e/z/x/y.png' );

          var baseMapIndex =
          "Map": baseMap
          ;

          // Create the map
          var map = new L.map('map',
          center: new L.LatLng(41.019829, 28.989864),
          zoom: 14,
          maxZoom: 18,
          zoomControl: false, // Disable the default zoom controls.
          layers: baseMap
          );

          // Create the control and add it to the map;
          var control = L.control.layers(baseMapIndex);
          control.addTo(map);

          // Call the getContainer routine.
          var htmlObject = control.getContainer();
          // Get the desired parent node.
          var a = document.getElementById('new-parent');

          // Finally append that node to the new parent, recursively searching out and re-parenting nodes.
          function setParent(el, newParent)

          newParent.appendChild(el);

          setParent(htmlObject, a);


          You must recursively go through all the children and reassign them to their parent. See the second answer for a simple recursive loop.



          https://stackoverflow.com/questions/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript






          share|improve this answer

























          • Nice work. Already up-voted you, but would you mind adding the relevant JavaScript to your answer?

            – elrobis
            Mar 22 '16 at 18:01











          • a.appendChild(control.onAdd(map)) should be enough. See also stackoverflow.com/questions/36041651/…

            – ghybs
            Mar 22 '16 at 19:56












          • It worked well with the getContainer solution. But when i tried with the a.appendChild(control.onAdd(map)), all the wms layers and layer control disappear.

            – mauricio santos
            Mar 23 '16 at 10:03











          • I update my answer with a recursive loop to get children, sorry. Please let me know if this doesn't work.

            – RomaH
            Mar 23 '16 at 12:40











          • @mauriciosantos My bad, it does not work as simply for L.control.layers.

            – ghybs
            Mar 23 '16 at 16:33











          Your Answer








          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "79"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f186131%2fplacing-controls-outside-map-container-with-leaflet%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          17














          Leaflet does a lot of hand-waving to hide implementation of the map portal but lucky for you they have thought of a solution!



          The getContainer function is just what you need.
          This returns the actual HTML node, not just the markup.



          It is then just as easy as un-childing(?) the node and assign it to a new parent, with a couple lines of Javascript.



          Working example and comments (and a kick-ass tileset)!



          http://codepen.io/romahicks/pen/ONmPmp



          The Code



          //Create Layer
          var baseMap = new L.TileLayer('http://s.tiles.mapbox.com/v3/gvenech.m13knc8e/z/x/y.png' );

          var baseMapIndex =
          "Map": baseMap
          ;

          // Create the map
          var map = new L.map('map',
          center: new L.LatLng(41.019829, 28.989864),
          zoom: 14,
          maxZoom: 18,
          zoomControl: false, // Disable the default zoom controls.
          layers: baseMap
          );

          // Create the control and add it to the map;
          var control = L.control.layers(baseMapIndex);
          control.addTo(map);

          // Call the getContainer routine.
          var htmlObject = control.getContainer();
          // Get the desired parent node.
          var a = document.getElementById('new-parent');

          // Finally append that node to the new parent, recursively searching out and re-parenting nodes.
          function setParent(el, newParent)

          newParent.appendChild(el);

          setParent(htmlObject, a);


          You must recursively go through all the children and reassign them to their parent. See the second answer for a simple recursive loop.



          https://stackoverflow.com/questions/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript






          share|improve this answer

























          • Nice work. Already up-voted you, but would you mind adding the relevant JavaScript to your answer?

            – elrobis
            Mar 22 '16 at 18:01











          • a.appendChild(control.onAdd(map)) should be enough. See also stackoverflow.com/questions/36041651/…

            – ghybs
            Mar 22 '16 at 19:56












          • It worked well with the getContainer solution. But when i tried with the a.appendChild(control.onAdd(map)), all the wms layers and layer control disappear.

            – mauricio santos
            Mar 23 '16 at 10:03











          • I update my answer with a recursive loop to get children, sorry. Please let me know if this doesn't work.

            – RomaH
            Mar 23 '16 at 12:40











          • @mauriciosantos My bad, it does not work as simply for L.control.layers.

            – ghybs
            Mar 23 '16 at 16:33















          17














          Leaflet does a lot of hand-waving to hide implementation of the map portal but lucky for you they have thought of a solution!



          The getContainer function is just what you need.
          This returns the actual HTML node, not just the markup.



          It is then just as easy as un-childing(?) the node and assign it to a new parent, with a couple lines of Javascript.



          Working example and comments (and a kick-ass tileset)!



          http://codepen.io/romahicks/pen/ONmPmp



          The Code



          //Create Layer
          var baseMap = new L.TileLayer('http://s.tiles.mapbox.com/v3/gvenech.m13knc8e/z/x/y.png' );

          var baseMapIndex =
          "Map": baseMap
          ;

          // Create the map
          var map = new L.map('map',
          center: new L.LatLng(41.019829, 28.989864),
          zoom: 14,
          maxZoom: 18,
          zoomControl: false, // Disable the default zoom controls.
          layers: baseMap
          );

          // Create the control and add it to the map;
          var control = L.control.layers(baseMapIndex);
          control.addTo(map);

          // Call the getContainer routine.
          var htmlObject = control.getContainer();
          // Get the desired parent node.
          var a = document.getElementById('new-parent');

          // Finally append that node to the new parent, recursively searching out and re-parenting nodes.
          function setParent(el, newParent)

          newParent.appendChild(el);

          setParent(htmlObject, a);


          You must recursively go through all the children and reassign them to their parent. See the second answer for a simple recursive loop.



          https://stackoverflow.com/questions/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript






          share|improve this answer

























          • Nice work. Already up-voted you, but would you mind adding the relevant JavaScript to your answer?

            – elrobis
            Mar 22 '16 at 18:01











          • a.appendChild(control.onAdd(map)) should be enough. See also stackoverflow.com/questions/36041651/…

            – ghybs
            Mar 22 '16 at 19:56












          • It worked well with the getContainer solution. But when i tried with the a.appendChild(control.onAdd(map)), all the wms layers and layer control disappear.

            – mauricio santos
            Mar 23 '16 at 10:03











          • I update my answer with a recursive loop to get children, sorry. Please let me know if this doesn't work.

            – RomaH
            Mar 23 '16 at 12:40











          • @mauriciosantos My bad, it does not work as simply for L.control.layers.

            – ghybs
            Mar 23 '16 at 16:33













          17












          17








          17







          Leaflet does a lot of hand-waving to hide implementation of the map portal but lucky for you they have thought of a solution!



          The getContainer function is just what you need.
          This returns the actual HTML node, not just the markup.



          It is then just as easy as un-childing(?) the node and assign it to a new parent, with a couple lines of Javascript.



          Working example and comments (and a kick-ass tileset)!



          http://codepen.io/romahicks/pen/ONmPmp



          The Code



          //Create Layer
          var baseMap = new L.TileLayer('http://s.tiles.mapbox.com/v3/gvenech.m13knc8e/z/x/y.png' );

          var baseMapIndex =
          "Map": baseMap
          ;

          // Create the map
          var map = new L.map('map',
          center: new L.LatLng(41.019829, 28.989864),
          zoom: 14,
          maxZoom: 18,
          zoomControl: false, // Disable the default zoom controls.
          layers: baseMap
          );

          // Create the control and add it to the map;
          var control = L.control.layers(baseMapIndex);
          control.addTo(map);

          // Call the getContainer routine.
          var htmlObject = control.getContainer();
          // Get the desired parent node.
          var a = document.getElementById('new-parent');

          // Finally append that node to the new parent, recursively searching out and re-parenting nodes.
          function setParent(el, newParent)

          newParent.appendChild(el);

          setParent(htmlObject, a);


          You must recursively go through all the children and reassign them to their parent. See the second answer for a simple recursive loop.



          https://stackoverflow.com/questions/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript






          share|improve this answer















          Leaflet does a lot of hand-waving to hide implementation of the map portal but lucky for you they have thought of a solution!



          The getContainer function is just what you need.
          This returns the actual HTML node, not just the markup.



          It is then just as easy as un-childing(?) the node and assign it to a new parent, with a couple lines of Javascript.



          Working example and comments (and a kick-ass tileset)!



          http://codepen.io/romahicks/pen/ONmPmp



          The Code



          //Create Layer
          var baseMap = new L.TileLayer('http://s.tiles.mapbox.com/v3/gvenech.m13knc8e/z/x/y.png' );

          var baseMapIndex =
          "Map": baseMap
          ;

          // Create the map
          var map = new L.map('map',
          center: new L.LatLng(41.019829, 28.989864),
          zoom: 14,
          maxZoom: 18,
          zoomControl: false, // Disable the default zoom controls.
          layers: baseMap
          );

          // Create the control and add it to the map;
          var control = L.control.layers(baseMapIndex);
          control.addTo(map);

          // Call the getContainer routine.
          var htmlObject = control.getContainer();
          // Get the desired parent node.
          var a = document.getElementById('new-parent');

          // Finally append that node to the new parent, recursively searching out and re-parenting nodes.
          function setParent(el, newParent)

          newParent.appendChild(el);

          setParent(htmlObject, a);


          You must recursively go through all the children and reassign them to their parent. See the second answer for a simple recursive loop.



          https://stackoverflow.com/questions/20910147/how-to-move-all-html-element-children-to-another-parent-using-javascript







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Apr 4 at 4:57

























          answered Mar 22 '16 at 17:46









          RomaHRomaH

          1,989814




          1,989814












          • Nice work. Already up-voted you, but would you mind adding the relevant JavaScript to your answer?

            – elrobis
            Mar 22 '16 at 18:01











          • a.appendChild(control.onAdd(map)) should be enough. See also stackoverflow.com/questions/36041651/…

            – ghybs
            Mar 22 '16 at 19:56












          • It worked well with the getContainer solution. But when i tried with the a.appendChild(control.onAdd(map)), all the wms layers and layer control disappear.

            – mauricio santos
            Mar 23 '16 at 10:03











          • I update my answer with a recursive loop to get children, sorry. Please let me know if this doesn't work.

            – RomaH
            Mar 23 '16 at 12:40











          • @mauriciosantos My bad, it does not work as simply for L.control.layers.

            – ghybs
            Mar 23 '16 at 16:33

















          • Nice work. Already up-voted you, but would you mind adding the relevant JavaScript to your answer?

            – elrobis
            Mar 22 '16 at 18:01











          • a.appendChild(control.onAdd(map)) should be enough. See also stackoverflow.com/questions/36041651/…

            – ghybs
            Mar 22 '16 at 19:56












          • It worked well with the getContainer solution. But when i tried with the a.appendChild(control.onAdd(map)), all the wms layers and layer control disappear.

            – mauricio santos
            Mar 23 '16 at 10:03











          • I update my answer with a recursive loop to get children, sorry. Please let me know if this doesn't work.

            – RomaH
            Mar 23 '16 at 12:40











          • @mauriciosantos My bad, it does not work as simply for L.control.layers.

            – ghybs
            Mar 23 '16 at 16:33
















          Nice work. Already up-voted you, but would you mind adding the relevant JavaScript to your answer?

          – elrobis
          Mar 22 '16 at 18:01





          Nice work. Already up-voted you, but would you mind adding the relevant JavaScript to your answer?

          – elrobis
          Mar 22 '16 at 18:01













          a.appendChild(control.onAdd(map)) should be enough. See also stackoverflow.com/questions/36041651/…

          – ghybs
          Mar 22 '16 at 19:56






          a.appendChild(control.onAdd(map)) should be enough. See also stackoverflow.com/questions/36041651/…

          – ghybs
          Mar 22 '16 at 19:56














          It worked well with the getContainer solution. But when i tried with the a.appendChild(control.onAdd(map)), all the wms layers and layer control disappear.

          – mauricio santos
          Mar 23 '16 at 10:03





          It worked well with the getContainer solution. But when i tried with the a.appendChild(control.onAdd(map)), all the wms layers and layer control disappear.

          – mauricio santos
          Mar 23 '16 at 10:03













          I update my answer with a recursive loop to get children, sorry. Please let me know if this doesn't work.

          – RomaH
          Mar 23 '16 at 12:40





          I update my answer with a recursive loop to get children, sorry. Please let me know if this doesn't work.

          – RomaH
          Mar 23 '16 at 12:40













          @mauriciosantos My bad, it does not work as simply for L.control.layers.

          – ghybs
          Mar 23 '16 at 16:33





          @mauriciosantos My bad, it does not work as simply for L.control.layers.

          – ghybs
          Mar 23 '16 at 16:33

















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Geographic Information Systems Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f186131%2fplacing-controls-outside-map-container-with-leaflet%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          រឿង រ៉ូមេអូ និង ហ្ស៊ុយលីយេ សង្ខេបរឿង តួអង្គ បញ្ជីណែនាំ

          Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given

          Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221