2010-01-14 45 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元素。