我正在使用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的方法,这些方法都不符合我的目标。
答案 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的
答案 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);
}
}
});