2010-01-14 35 views
21

我试图找到一种方法来获取标记的DOM元素。 Google似乎使用不同的元素来展示标记和处理事件。在Google Maps API中获取标记的DOM元素3

到目前为止我已经弄清了2件事。 有一个名为fb的生成变量,它在标记对象上包含DOM元素,但我认为Google下一次更新API时,它将被命名为不同的东西。所以不行。其次,如果将点击事件附加到标记,则API将事件DOM元素作为参数发送到您指定的任何函数。在Firebug中查看它时,我无法找到两者之间的任何关系。

我想要完成的是操纵DOM元素()并为其提供更多信息,然后只是一个带有背景的“div”元素。

我已经在版本2中使用名称属性(未记录)在div元素上生成了一个id。

有没有人有想法?

+0

当你说“给它”你是什么意思是什么呢? InfoWindow或Overlay的HTML? – 2010-01-14 16:05:07

+0

用带有文本和链接的新图标的html元素替换图标。 – fredrik 2010-01-14 16:20:19

+3

同样,要知道Google为什么没有实现(并记录)一个本地方法来检索它,这将是太棒了。或者在Marker对象上只有一个HTML属性,用于创建给定大小的包装。而且你可以随心所欲地搞定它。 – fredrik 2010-01-14 16:27:40

回答

1

我发现了一个非常糟糕的解决方法。可以使用title属性传递一个id属性。

fixMarkerId = function() { 
       $('div[title^="mtg_"]').each(function (index, elem) { 
        el = $(elem); 
        el.attr('id', el.attr('title')); 
        el.removeAttr('title'); 
       }); 
      }, 
      tryAgainFixMarkerId = function() { 
       if ($('div[title^="mtg_"]').length) { 
        fixMarkerId(); 
       } else { 
        setTimeout(function() { 
         tryAgainFixMarkerId(); 
        }, 100); 
       }; 
      } 

if ($('div[title^="mtg_"]').length) { 
       fixMarkerId(); 
      } else { 
       setTimeout(function() { 
        tryAgainFixMarkerId(); 
       }, 100); 
      }; 

我强烈不建议这种解决方案适用于任何生产环境。但现在我用它来保持发展。但仍在寻找更好的解决方案。

3

我也在寻找DOM元素来实现自定义工具提示。 一个同时挖掘到谷歌覆盖,自定义库等等,我已经结束了与基于(使用jQuery)弗雷德里克的所有权办法如下方案后:

 
google.maps.event.addListener(marker, 'mouseover', function() { 

    if (!this.hovercardInitialized) { 

     var markerInDOM = $('div[title="' + this.title + '"]').get(0); 

     // do whatever you want with the DOM element 

     this.hovercardInitialized = true; 
    } 

}); 

希望这可以帮助别人。

+3

2013年2月,这似乎不适用于我。 – Ryan 2013-03-01 03:10:48

9

我发现这种方法很有用,虽然它可能不适用于所有环境。 设置标记图像时,将唯一的锚点添加到URL中。 例如:

// Create the icon 
var icon = new google.maps.MarkerImage(
    "data/ui/marker.png", 
    new google.maps.Size(64, 64), 
    new google.maps.Point(0,0), 
    new google.maps.Point(48, 32) 
); 

// Determine a unique id somehow, perhaps from your data 
var markerId = Math.floor(Math.random() * 1000000); 
icon.url += "#" + markerId; 

// Set up options for the marker 
var marker = new google.maps.Marker({ 
    map: map, 
    optimized: false, 
    icon: icon, 
    id: markerId, 
    uniqueSrc: icon.url 
}); 

现在你有一个独特的选择,即:

$("img[src='data/ui/marker.png#619299']") 

,或者如果你有标记:

$("img[src='" + marker.uniqueSrc + "']") 
2
  1. 定制覆盖(由器具使用onAdd,画,删除),而拖动它有一些问题。
  2. 也许你可以得到由类名gmnoprint和它在被附加索引标记DOM元素。