从地图中删除标记(Google Maps API v3)

时间:2013-04-14 20:13:43

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

我正在使用谷歌地图开发一个应用程序,它应该在地图上显示几个类别。现在我想有可能添加几个类别的标记,并在必要时删除它们。

我已经设法弄明白了。至少,几乎......我在删除某个类别的标记时遇到了麻烦。我已经在jsfiddle上创建了一个现场演示,以明确这一点。 所以这就是我尝试这样做的方式:

CODE

首先我初始化地图等(但这与此无关)。然后我在地图上添加标记:

for(i in markers){
    var marker = new google.maps.Marker({
        map: map,
        draggable: false,
        position: new google.maps.LatLng(markers[i].latitude, markers[i].longitude),
        visible: true,
        data: category
    });
    newMarkers.push(marker);
}

正如您所看到的,我在对象中有'data:category'。这不是google maps api,但是它没有给我任何错误,并且当我想删除标记时,我可以搜索数组。这里是removeMarker函数:

function removeMarkers(category)
{
    for(i in newMarkers) {
        if(newMarkers[i]['data'] == category){
            count ++;
            newMarkers[i].setMap(null); 
            newMarkers.splice(i, 1);
        }
    }
}

它确实删除了标记,但并非全部删除... 有没有人能解决我的问题?

LIVE DEMO

提前致谢,

Helena S。

1 个答案:

答案 0 :(得分:2)

似乎问题是您正在迭代newMarkers数组并同时从中移除元素。
试试这个。它只将数组中删除的标记值设置为null,然后在循环之后过滤那些空值:

    for(i in newMarkers) {
        if(newMarkers[i]['data'] == category){
            count ++ 
            newMarkers[i].setMap(null); 
            newMarkers[i] = null;
        }
    }
    newMarkers = newMarkers.filter(function(val){ return !!val; });

http://jsfiddle.net/GJUcy/