Javascript 基于id从google maps API中删除多个标记
我使用ajax接收学生列表,并使用以下代码放置标记:Javascript 基于id从google maps API中删除多个标记,javascript,jquery,google-maps-api-3,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"];
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寻找方法,但这两种方法都不符合我的目标。创建一个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_changed-listener,以便在将map属性设置为null时解除其绑定:
要删除具有特定id的所有标记,只需调用:
students.set('theId',null);
与基于数组的方法相比,它的优点是:特别是当您有很多标记时,您不必迭代所有这些标记并检查id
演示:在聊天室里,我在Ethaan的帮助下找到了答案。他帮我找到了问题所在 无论如何,这里是我的代码,工作正常。我传递给每个标记的id:val['id']是它连接到的窗体的名称。。。所以我只是在所有标记中循环并移除那些与给定id绑定的标记…我希望它不必是一个循环,也可以是一个remove all where 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);
}
}
});
你有没有一个标记数组或者什么东西来存储所有的标记?我可以我猜我只是不明白怎么。。。是否有与每个阵列关联的id?它是否简单到给每个标记一个Id为1的标记,然后删除每个标记为1的标记?您可以有类似var markers=[]的内容,当您添加一个新标记时,请使用markers.pushmarker。基于此,我们可以做一些验证来删除marker我该如何从中调用一组特定的marker来删除?会是这样吗?var removeMarkers=markers[someKey];removeMarkers.setMapnull;
students.set('theId',null);
$("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);
}
}
});