Javascript 添加非标准标记特性
为了允许用户在地图上删除正确的标记,我需要将每个标记与其数据存储ID(一个字符串)相关联。我原本以为可以将ID设置为整数,并使用标记的现有Javascript 添加非标准标记特性,javascript,google-maps-markers,Javascript,Google Maps Markers,为了允许用户在地图上删除正确的标记,我需要将每个标记与其数据存储ID(一个字符串)相关联。我原本以为可以将ID设置为整数,并使用标记的现有zIndex属性。这将导致下面创建每个物理标记的代码。(但是,唉,我无法访问整数ID值。) 我不知道如何在google.maps.Marker的原型中添加一个属性来保存ID字符串,我想无论如何,修改这样的原型是不可取的。那么这是如何做到的呢?我是否必须使用zIndex属性作为数组的索引,该数组包含与zIndex值相对应的实际ID作为元素?那也很尴尬。当然有更好
zIndex
属性。这将导致下面创建每个物理标记的代码。(但是,唉,我无法访问整数ID值。)
我不知道如何在
google.maps.Marker
的原型中添加一个属性来保存ID字符串,我想无论如何,修改这样的原型是不可取的。那么这是如何做到的呢?我是否必须使用zIndex
属性作为数组的索引,该数组包含与zIndex
值相对应的实际ID作为元素?那也很尴尬。当然有更好的方法可以做到这一点。假设您有一个位置数组
:
var markers = [];
for(var i in locations){
var loc = locations[i];
var marker = new google.maps.Marker({
position: loc.point
map: map,
title: loc.text,
icon: loc.icon
});
marker.id = loc.id;
markers.push(marker);
}
您可以这样做,因为每个标记只是一个普通的旧javascript对象
然后,您可以定义一个函数来隐藏具有特定ID的标记:
function hideMarkersWithIdIn(ids){
var markersToRemove = markers.filter(function(marker){
return ids.indexOf(marker.id) > -1;
});
markersToRemove.forEach(function(marker){
marker.setMap(null);
});
}
可以像这样使用
hideMarkersWithIdIn([1,5,3])
您可以设置例如
marker.id=id
并稍后访问它。您的评论基本上回答了我的问题。但我还是被卡住了,因为我不知道该隐藏哪个点击标记。我知道要从我的google app engine数据存储中删除哪个标记,因为这是marker.id
的值。我必须问另一个关于隐藏的问题,因为即使@jonathanwilson的回答也并没有将点击的标记和要隐藏的标记相关联,我认为,因为hideMarkersWithIdIn()
要求索引而不是标记点击作为参数。
hideMarkersWithIdIn([1,5,3])