2016-02-01 58 views
-1
myObject { div: htmlElement, foo1: bar1, foo2: bar2 } 

密鑰div原始密鑰,它包含此對象的HTML從HTML訪問對象?

是否有可能訪問/獲取/設置myObject和其他價值觀:foo1foo2當我有範圍htmlElemente.g點擊它?

myObject是原型,我不介意製作原型getter/setter,但我不知道如何通過/通過HTML元素訪問對象。


使對象:不介意谷歌地圖的一部分,它只是一個普通對象..

function customHTML(latlng, foo, map) { 
    this.latlng = latlng; 
    this.foo = foo; 
    this.setMap(map); 
} 
customHTML.prototype = new google.maps.OverlayView(); 

customHTML.prototype.draw = function() { 
    var self = this; 
    var div = this.div; 

    //Create div if there's none 
    if (!div) { 

     div = this.div = document.createElement('div'); 
     div.className = 'custom-html'; 

     var panes = this.getPanes(); 
     panes.overlayImage.appendChild(div); 
    } 

    //Location on map - not relevant for this question 
    var point = this.getProjection().fromLatLngToDivPixel(this.latlng); 
    if (point) { 
     div.style.left = (point.x - 20) + 'px'; 
     div.style.top = (point.y - 64) + 'px'; 
    } 
}; 

//Create new objects 
var data = /*parsed JSON*/; 
var count = data.lenght; 
var myMap = /*Google Map object - not relevant for this question*/; 

for(i=0; i<count; i++) { 
    new CustomHTML(data[i].latlng, data[i].foo, myMap); 
} 

別的地方代碼:

//Clicking element that was made above 
jQuery('body').on('click', '.custom-html', function(event) { 

     //I need to access customHTML.foo for example, how? 
     //PS! I need to access it from outside, I cannot 
     //attach this click event in prototype.draw 
} 
+0

'myObject'是JSON嗎? – pratikpawar

+0

@pratikwebdev數據是從JSON中獲取的,但我構建了自己的原型'myObject',這只是瀏覽器內存中的一個對象,我需要通過'HTML' *(點擊事件是精確的)*在視口中呈現並且是該對象的一部分。 – Solo

+0

@Juhana爲什麼不呢?字符串格式的HTML元素?進一步渲染這個字符串可以用來渲染元素? – pratikpawar

回答

0

new CustomHTML(data.latlng, data.foo, myMap);賦值給JS變量。

var customEle = new CustomHTML(data.latlng, data.foo, myMap); 

您可以訪問它

jQuery('body').on('click', '.custom-html', function(event) { 
    alert(customEle.foo); 
} 

UPDATE要回答你的上的多個元素的第二個問題。

1)在draw函數中分配ID給div

2)在JSON中創建一個結構,將所有customHTML作爲id作爲關鍵。

var arrCustomHTML = {}; 
arrCustomHTML.divId = customHTML; 

3)如何檢索它。

jQuery('body').on('click', '.custom-html', function(event) { 

     var divId = $(this).prop('id'); 
     var customHTMLForDiv = arrCustomHTML.divId; 
     alert(customHTMLForDiv.foo); 
} 

還有另外一種方法。在創建過程中使用jquery data()函數在創建該元素之後爲該div附加customHTML

div.data('customHTML' , customHTML); 

要訪問事件:

jQuery('body').on('click', '.custom-html', function(event) { 
     var ele = $(this).data('customHTML'); 
     alert(ele.foo); 
    } 

LMK它是否適合你

+0

這是一個好主意,但如果有多個'CustomHTML'會怎麼樣?如何訪問屬於該對象一部分的特定「HTML」元素的正確對象? – Solo

+0

更新了我的答案。 @索羅 – pratikpawar

+0

謝謝,我確定它會工作。我在腦海中使用了'id'或'data-'屬性,但我想也許有一種更簡單的方法來獲取該對象_a.k.a_獲取該「HTML」元素的父屬性_a.k.a_向上移動在對象的層次結構中使用原型getter和setter。 – Solo