通过id将变量设置为另一个变量

时间:2012-09-14 22:36:04

标签: jquery google-maps-api-3

我正在使用Google地图,我正在尝试创建一个支持不同KML叠加层的侧边栏。我已经将KML图层放入变量中,与按钮的ID标签相同,按下以激活它们,希望将该ID称为变量,然后可以在setMap函数中使用。
不确定如果这实际上是可能的

在这个脚本中,我试着这样做,你按下带有ID标签'kml1'的元素,设置testvar ='kml1',然后就可以把testvar.setMap(the_Map)放到位了kml1.setMap(the_Map),testvar == kml1

的jQuery

kml1 = new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
            preserveViewport: true,
        });
        kml2 = new google.maps.KmlLayer("http://www.odomain.com/map_overlay2.txt", {
            preserveViewport: true,
        });

    $(document).ready(function() {
        $('.kml_item').toggle(
                function() {
                    for (i=0; i<50; i++) {
                        testvar = this.id
                        if (testvar == 'kml' + i) {
                            testvar.setMap(the_Map);
                            break;
                        }
                    }
                },
                function() {
                    for (i=0; i<50; i++) {
                        testvar = this.id
                        if (testvar == 'kml' + i) {
                            testvar.setMap(null);
                            break;
                        }
                    }
            );
    })

关联的HTML

<div id="kml1" class="kml_item">KML 1</div>
            <div id="kml2" class="kml_item">KML 2</div>

3 个答案:

答案 0 :(得分:0)

尝试.click()功能

   $('#kml1').click(function(){
      new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
            preserveViewport: true,
        });
    });

答案 1 :(得分:0)

我认为通过一些调整你可以得到你所追求的东西。

// These kml objects will be attached to the global window object at
// window.kml1
// or
// window['kml1']
var kml1 = new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
        preserveViewport: true,
    });
var kml2 = new google.maps.KmlLayer("http://www.odomain.com/map_overlay2.txt", {
        preserveViewport: true,
    });

$(document).ready(function() {
    $('.kml_item').click(function() {
        // Access the various kml objects and set the_Map
        var kml = window[this.id]
        if(kml.getMap()) {
            kml.setMap(null);
        }
        else {
            kml.setMap(the_Map);
        }
    });
});

答案 2 :(得分:0)

不确定在这个网站上回答你自己的问题是否真的犹豫不决,但我想出了另一种方法,虽然我确实认为我使用ID标签作为变量的初始问题是无法解决的问题。我将它们放在一个数组中,而不是将每个KML层放在一个单独的变量中。给可点击的div一个数字作为标题标签允许该函数然后计数,直到数组项与div的标题号匹配,并将该项从数组放到地图上。

KML数组

kml_arr = [
            new google.maps.KmlLayer("http://www.domain.com/map_overlay1.txt", {
            preserveViewport: true,
        }),
            new google.maps.KmlLayer("http://www.domain.com/map_overlay2.txt", {
            preserveViewport: true,
        })
        ]

的jQuery

$(document).ready(function() {
        $('.kml_item').toggle(
                function() {
                    $(this).animate({backgroundColor: '#ffffff'}, 200);
                    for (i=0; i<50; i++) {
                        if (i == this.title) {
                            kml_arr[i].setMap(the_Map);
                            break;
                        }
                    }
                },
                function() {
                    $(this).animate({backgroundColor: '#d0d0d0'}, 200);
                    for (i=0; i<50; i++) {
                        if (i == this.title) {
                            kml_arr[i].setMap(null);
                            break;
                        }
                    }
                }
            );
    })

关联的HTML

                <div title="0" id="kml1" class="kml_item">KML 1</div>
            <div title="1" id="kml2" class="kml_item">KML 2</div>