2014-03-27 65 views
0

我初始化一些谷歌地圖,其中大量的數據通過ajax和標識符發送,但我遇到了一個奇怪的範圍問題(或我相信)。範圍與jQuery和谷歌地圖api

我初始化呼叫...

$(".dataMap").each(function(i, obj){ 
var mapID = $(this).attr('mapID'); 
if(mapID !== "undefined"){ 
    var mapBox = $(this); 
    var mapBoxID = $(this).attr('id'); 
    //get our data 
    var jsonp_url = "url-removed-for-security"; 
    $.getJSON(jsonp_url, function(data){ 
     //now we start creating our map. 
     //first, lets work on sizing. 
     var myOptions = { 
      zoom: 11, 
      center: new google.maps.LatLng(42.351391443036654, -83.09239196777344), 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     } 
     map = new google.maps.Map(document.getElementById(mapBoxID), myOptions); 
    }); // end of json call 
} 

});

這行工作

map = new google.maps.Map(document.getElementById(mapBoxID), myOptions); 

但是,如果我改成這樣......

map = new google.maps.Map(mapBox, myOptions); 

它拋出的錯誤:未捕獲「類型錯誤:無法設置屬性未定義的‘位置’」

我不明白爲什麼傳遞對象失敗。這與document.getElementById不等效嗎?如果不是,會是什麼?它顯然能夠檢測到我使用的div,因爲工作的例子工作,哈哈。它能夠從$(this)引用中獲取divID。我非常迷戀這一個。

回答

2
var mapBox = $(this); 

mapBox是一個jQuery對象。你需要的是一個DOM元素。你可以得到:

var mapBox = $(this)[0]; 

還有其他的方法,但這應該工作。

+0

這就是我一直在尋找的。我認爲直到這一點,我沒有意識到jQuery對象和DOM元素之間的區別,我只是認爲一個是指向另一個的指針。 –

1

這不是範圍問題。在jQuery返回值和DOM節點之間存在混淆。

var mapBox = $(this); 

返回包含一個元件

[<div class="dataMap"></div>] 

這是無用的谷歌地圖的陣列,其expects類型HTMLElement

document.getElementById(MaxBoxID)返回這樣的HTMLElement的DOM節點。


If it's not, what would be? It clearly is able to detect the div I'm using, since the worked example works, lol. It's able to get the divID from the $(this) reference. I'm very stumped on this one.

  • $(this) - >返回陣列與包含標記的一個元素。

  • $(this).attr('id') - >返回一個字符串可以作爲參考使用document.getElementById

  • document.getElementById - >返回HTMLElement