我正在使用Google地图开发一个应用,该应用应在地图上显示多个类别。现在,我希望可以从多个类别添加标记,并在必要时将其删除。

我设法弄清楚了整个事情。至少,几乎...我在删除类别标记方面遇到了麻烦。为了清楚起见,我在jsfiddle上创建了一个现场演示。
因此,这是我尝试执行的操作:



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

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

提前致谢,

海伦娜·S。

最佳答案

似乎问题在于您正在迭代newMarkers数组,同时从中删除元素。
试试这个吧。它仅将数组中已删除的标记值设置为null,然后在循环之后过滤这些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/

关于javascript - 从 map 上删除标记(Google Maps API v3),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16003836/

10-14 14:34
查看更多