使用jQuery.data()存储/检索的对象是否知道它所附加到的DOM元素?

使用jQuery.data()存储/检索的对象是否知道它所附加到的DOM元素?,jquery,Jquery,考虑以下示例: HTML: ComplexObject()是否有办法知道它“附加”到哪个DOM元素——在本例中是DIV“#cool DIV”。我想只使用ComplexObject()类向“#cool div”添加文本。。。但我不认为我能,或者至少我没能解决它。我知道这可能不是你想要的性感的内置类型答案,但你可以用这样的东西明确地分配它: var ComplexObject = function(domElt) { this.domElt = domElt; this.Append

考虑以下示例:

HTML:


ComplexObject()是否有办法知道它“附加”到哪个DOM元素——在本例中是DIV“#cool DIV”。我想只使用ComplexObject()类向“#cool div”添加文本。。。但我不认为我能,或者至少我没能解决它。

我知道这可能不是你想要的性感的内置类型答案,但你可以用这样的东西明确地分配它:

var ComplexObject = function(domElt) {

   this.domElt = domElt;

   this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
   };

};

var obj = new ComplexObject($('#cool-div"));
var ComplexObject = function() {

  this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
  };

  this.elem = '';

};

var obj = new ComplexObject();

$("#cool-div").data("o", obj);
obj.elem = $("#cool-div"); // or obj.elem = $("#cool-div")[0]; if you want the node

希望这至少能有所帮助

我知道这可能不是你想要的性感的内置类型的答案,但你可以用如下方式明确地分配它:

var ComplexObject = function(domElt) {

   this.domElt = domElt;

   this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
   };

};

var obj = new ComplexObject($('#cool-div"));
var ComplexObject = function() {

  this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
  };

  this.elem = '';

};

var obj = new ComplexObject();

$("#cool-div").data("o", obj);
obj.elem = $("#cool-div"); // or obj.elem = $("#cool-div")[0]; if you want the node

希望这至少能有所帮助

不,ComplexObject不知道,除非你告诉它。你可以这样做:

var ComplexObject = function(domElt) {

   this.domElt = domElt;

   this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
   };

};

var obj = new ComplexObject($('#cool-div"));
var ComplexObject = function() {

  this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
  };

  this.elem = '';

};

var obj = new ComplexObject();

$("#cool-div").data("o", obj);
obj.elem = $("#cool-div"); // or obj.elem = $("#cool-div")[0]; if you want the node

不,ComplexObject不知道,除非你告诉它。你可以这样做:

var ComplexObject = function(domElt) {

   this.domElt = domElt;

   this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
   };

};

var obj = new ComplexObject($('#cool-div"));
var ComplexObject = function() {

  this.Append = function(textToAppend) {
      //append text to the div that this is "attached" to
  };

  this.elem = '';

};

var obj = new ComplexObject();

$("#cool-div").data("o", obj);
obj.elem = $("#cool-div"); // or obj.elem = $("#cool-div")[0]; if you want the node

默认情况下,对象不知道它附加到哪个元素——数据可以是任何东西,因此jquery不知道在附加它时如何告诉对象

您可以围绕
.data
编写一个wapper,使其符合您的要求,例如:

$.fn.dataaware = function(key, value) {
    this.data(key, value);

    if (value instanceof ComplexObject)
        value.setContext(this);
}

您可能还需要包装
.removeData

默认情况下,对象不知道它附加到哪个元素-数据可以是任何内容,因此jquery不知道在附加对象时如何告知对象

您可以围绕
.data
编写一个wapper,使其符合您的要求,例如:

$.fn.dataaware = function(key, value) {
    this.data(key, value);

    if (value instanceof ComplexObject)
        value.setContext(this);
}

您可能还需要包装
.removeData

我想您可能需要.proxy()这个。我想你可能需要。代理()这个。