用于传单地图标记弹出窗口的XML到HTML表格

时间:2014-07-02 12:44:48

标签: javascript xml web mapping leaflet

我有一个带有一系列位置(地方政府区域质心)的网络地图,根据LGA是否具有内部功能,可以过滤掉我的地图。它通过xml文档实现此目的,该文档存储与这些位置相关的功能。

<LGA name="ThisLGA">
      <feature>
           <name>Feature 1</name>
           <status>lolcat</status>
      </feature>
      <feature>
           <name>Feature 2</name>
           <status>lolcat</status>
      </feature>
</LGA>
<LGA name="ThisOtherLGA">
      <feature>
           <name>Feature 1</name>
           <status>lolcat</status>
      </feature>
      <feature>
           <name>Feature 1</name>
           <status>lolcat</status>
      </feature>
</LGA>

我现在要做的是让每个LGA标记的弹出窗口包含一个包含每个功能名称和状态的表(最终可能包含其他属性)。

有没有人对如何实现这一点有任何建议,我看到有些人使用underscore.js并创建HTML模板。但是我不知道我需要多少行,因此必须动态完成。

是否需要使用php来完成比javascript更多的事情?

1 个答案:

答案 0 :(得分:1)

解决了这个问题,我想如果有人有兴趣我就给出解决方案。

需要将HTML放入.bindpopup()方法的字符串。

function popupTable(LGA){
//Load in xml document
var xml = loadXML("spatialLayers/nctProperties.xml");
//Start of HTML string for popup
var htmlString = "<div><table>";
//Create list of all LGA nodes
var xmls=xml.getElementsByTagName("LGA");
for (i=0;i<xmls.length;i++){ 
    //Get a specific LGA and create HTML string of
    if (xmls[i].getAttribute("type")===LGA){
        var iteratorLength = xmls[i].getElementsByTagName("name").length;
        //Loop through all child nodes of the LGA
        for (j=0;j<iteratorLength;j++){
            var status = xmls[i].getElementsByTagName("status")[j].childNodes[0].nodeValue;
//Customise icon in table based upon property status
            if (status === "Covenant Registered"){
                var addToString = "<tr><td>"+ xmls[i].getElementsByTagName("name")[j].childNodes[0].nodeValue+"</td><td><image src=images/mapMarkers/marker1_green_mini.png></td></tr>";
            }else if (status === "Yellow Box"){
                var addToString = "<tr><td>"+ xmls[i].getElementsByTagName("name")[j].childNodes[0].nodeValue+"</td><td><image src=images/mapMarkers/marker1_yellowbox_mini.png></td></tr>";
            }else if (status === "For Sale"){
                var addToString = "<tr><td>"+ xmls[i].getElementsByTagName("name")[j].childNodes[0].nodeValue+"</td><td><image src=images/mapMarkers/marker1_brown_mini.png></td></tr>";
            }else{
                var addToString = "<tr><td>"+ xmls[i].getElementsByTagName("name")[j].childNodes[0].nodeValue+"</td><td>";
            }

            //console.log(addToString); 
            htmlString = htmlString + addToString;
    };
    };

};
return htmlString +"</table></div>";

}