根据ID从google maps API中删除多个标记

时间:2015-02-02 22:02:51

标签: javascript jquery google-maps-api-3

我正在使用ajax接收学生列表并使用以下代码放置标记:

           jQuery.each( data, function( key, val ) {    
                geocoder = new google.maps.Geocoder();
                var color = $("select[name=color]", form).val();
                var address = val["address"];
                geocoder.geocode( { 'address': address}, function(results, status) {
                    if(results){
                      marker = new google.maps.Marker({
                            map: map,
                            position: results[0].geometry.location,
                            icon: "../image/icons/map/icon_marker"+color+".png",
                            title: val["name"],
                            id:val['id'],
                            url: ""
                        });

                    }
                });

            });

需要注意的是,val ['id']不是该学生的唯一ID,而是与以这种方式放置的所有标记绑定的ID。我假设这需要成为一个类或某个东西而不是id,但我不想改变它,除非我知道它是正确的。

有没有办法调用具有给定ID的每个标记并仅删除这些标记?我一直在寻找所有ID或1个ID的方法,这些方法都不符合我的目标。

2 个答案:

答案 0 :(得分:0)

创建MVCObject并设置名称等于id且地图为值的属性。

//outside of $.each()
if(!students){
 students=new google.maps.MVCObject();
}

//inside of $.each()
if(!students.get(val['id'])){
  students.set(val['id'],map);
}

创建标记后,将标记的map - 属性绑定到students的特定项目:

marker.bindTo('map', students, val['id']);

并为map_changed marker unbind属性添加map - 侦听器,并将其设置为null

google.maps.event.addListener(marker, 'map_changed', function () {
  if (!this.getMap()) {
    this.unbind('map');
  }
});

删除具有特定id的所有标记,只需调用:

students.set('theId',null);

与基于数组的方法相比的优势:特别是当你有很多标记时,你不必迭代所有这些标记并检查id的

演示:http://jsfiddle.net/doktormolle/smo8eob2/

答案 1 :(得分:0)

我在Ethaan的帮助下在聊天室中找到了它。他帮助我到达了我能看到问题的地方!

无论如何这里是我工作正常的代码。 id:val [' id']我传递给每个标记的是它所连接的表单的名称...所以我只是循环遍历所有标记并删除它们与给定的id绑定...我希望它不必是一个循环,可以只是"删除所有id =" form"但它现在有效!

$("input[name=deleteLayer]").click(function(){
    //Get the name of the form that the button "deleteLayer" belongs to
    var formName = $(this).closest("form").attr('name');
    for(var $x = 0; $x < markersArray.length; $x++){
        //markersArray is an array that holds all the markers
        if(markersArray[$x]["id"] == formName){
            var removeMarkers = markersArray[$x];
            removeMarkers.setMap(null);
        }
    }
});