Javascript / jquery Google标记刷新

时间:2011-07-20 00:32:32

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

我有一个谷歌地图,我通过ajax从数据库中渲染标记。除了标记重绘(旧的删除和新绘制)之外,它的效果很好。我从ajax返回的数据是逗号分隔变量的文本形式。我试图找到一种有效的方法来删除不再适用的数据并添加新的数据。我认为,一旦我从ajax帖子中获取数据就处理这个问题的最佳方法,因为在它变成标记之前它是最纯粹的形式。

之前有没有人这样做过或者有经验?如果我在LINQ中这样做,除了两个数据列表之外我会做某种事情。我不知道如何在js中快速执行它,因为js是循环中较慢的一部分。

1 个答案:

答案 0 :(得分:0)

问题中可能没有足够的细节,但假设如下:

  1. Ajax会返回包含以逗号分隔的 唯一 标记ID列表的文本。
  2. 您有一个列表,或前一个 唯一 标记ID的ajax调用中的数组。
  3. 您需要一个要删除的标记列表,以及另一个要添加的标记列表。
  4. 如果不是这样,那么请澄清问题,添加细节。 “之前”和“之后”会很好。

    否则,这样的方法应该有效:

    示例数据:

    var oldMarkers      = [ "Joe's Diner", 
                            "Frank's Bail bonds", 
                            "Precinct 9", 
                            "Fence and Go"
                        ];
    var newMarkerStr    = "Precinct 9, Memorial Hospital,"
                        + " Frank's Bail bonds, Mary's shyster";
    //-- Split on commas; strip out boundary whitespace.
    var newMarkers      = newMarkerStr.split (/(?:\s*,\s*)+(?!(?:\s*,\s*))/);  
    


    这样的流程:

    var toAdd           = newMarkers.slice ();  //-- Copy the array.
    
    var toDelete        = $.grep (oldMarkers, function (marker) {
                            var K   = $.inArray (marker, newMarkers);
                            if (K  ==  -1) {
                                //-- Old item not in the list, delete it.
                                return true;
                            }
                            else {
                                /*-- Old item is in the new list, mark it as
                                    to be removed from the "add" list.
                                */
                                toAdd[K] = -666;
                            }
                            return false;
                        } );
    toAdd               = $.map (toAdd, function (marker) { 
                            return (marker == -666) ? null : marker; 
                        } );
    


    See it live at jsFiddle.