2012-03-01 38 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 
相關問題