【问题标题】:Accessing object from HTML?从 HTML 访问对象?
【发布时间】:2016-02-01 23:57:12
【问题描述】:
myObject { div: htmlElement, foo1: bar1, foo2: bar2 }

div原始键,它包含此对象的HTML

当我在范围内有htmlElement 时,是否可以访问/获取/设置myObject 和其他值:foo1foo2例如点击它?

myObject 是原型,我不介意制作原型 getter/setter,但我不知道如何使用/通过 HTML 元素访问对象。


制作对象:不要介意Google Maps 部分,它只是一个普通对象..

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
}

【问题讨论】:

  • myObject 是 JSON 对吗?
  • @pratikwebdev 数据取自 JSON,但我构建了自己的原型 myObject,这只是浏览器内存中的一个对象,我需要通过 HTML (点击事件到准确地说) 在视口中呈现并且是该对象的一部分。
  • @Juhana 为什么不呢?字符串格式的 HTML 元素?进一步渲染这个字符串可以用来渲染元素吗?
  • 所以myObject 也是 JSON。如果您可以从浏览器内存或任何可以在范围内的 HTML 元素中访问它的地方获取它。提供有关您需要在何时何地访问它的更多信息。
  • @pratikwebdev 不,它不是 JSON,我在从那里获取数据并构造我自己的对象之前解析 JSON。我添加了一个示例。

标签: javascript object prototype


【解决方案1】:

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);
 }

更新回答关于多个元素的第二个问题。

1) 将 ID 分配给在 draw 函数中创建的 div

2) 在 JSON 中创建一个结构来保存所有 customHTMLid 作为键。

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 如果它适合你

【讨论】:

  • 这是个好主意,但是如果有多个 CustomHTML 怎么办?如何访问属于该对象的特定 HTML 元素的正确对象?
  • 更新了我的答案。 @Solo
  • 谢谢,我相信它会工作的。我曾在脑海中使用过iddata- 属性,但我认为也许有更简单的方法来获取该对象a.k.a 获取该HTML 元素的父属性a.k.a 在对象的层次结构中向上移动并使用原型 getter 和 setter。
  • AFIK 这是不可能的,因为 div 被存储在 customHTML 对象中,但是一旦呈现它就不能与 JSON 对象本身耦合。如果它解决了您的问题,请接受并投票
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多