2012-03-01 20 views
0

考虑下面的例子:使用jQuery .data()存储/检索的对象是否具有它所连接的DOM元素的任何知识?

HTML:

<div id="cool-div"></div> 

JS/jQuery的:

var ComplexObject = function() { 

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

}; 

var obj = new ComplexObject(); 
$("#cool-div").data("o", obj); 

是否有的把complexObject的方式()知道哪个DOM元素它是 “附接”到 - 在这种情况下DIV“#cool-div”。我想使用ComplexObject()类将文本添加到“#cool-div”中......但我认为我不能,或者至少我没有能够解决它。

+0

我想你可能需要.proxy()这一个。 http://api.jquery.com/jQuery.proxy/ – 2012-03-01 19:57:53

回答

2

对象不知道默认情况下,哪一个元素(一个或多个)它连接到 - 数据可以是任何东西,所以jQuery的不知道如何当它告诉对象附加它。

你可以写一个wapper各地.data以使其符合您的要求,例如:

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

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

你可能也想换.removeData为好。

1

我知道这可能不是性感,内置你要找的类型的答案,但你总是有这样的事情明确地赋值:

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

希望这至少可以帮!

1

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

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 
相关问题