2009-07-30 62 views
5

據我瞭解,通過美元符號引用jQuery中的任何DOM元素(如:$("#mydiv"))將返回一個對象。如何將屬性分配給jQuery對象?

我期待一個額外的屬性添加到一個對象作爲這樣的:

$("#mydiv").myprop = "some value"; 

但這似乎並沒有工作。 我想在此對象中存儲一個值,以便稍後可以參考。

儘管如此,即使在設置屬性之後,下面的代碼也會給我一個undefined的值。

$("#mydiv").myprop = "some value"; 
alert($("#mydiv").myprop); 

此代碼不能正常工作或:

$("#mydiv")["myprop"] = "some value"; 
alert($("#mydiv").myprop); 

有沒有辦法來實現這一目標?或者是否需要通過$("#mydiv").attr("myprop", "some value")將所有屬性存儲爲DOM對象上的屬性(這不太理想)。

謝謝!

+0

我不認爲你可以這樣做...你可能不得不和你最後的聲明一起去...... – Jason 2009-07-30 00:57:07

回答

13

jQuery公開了帶有data方法的property-bag的概念。

// set some arbitrary data 
$('#selector').data('example-property', exampleValue); 

// get the value later 
var theValue = $('#selector').data('example-property') 

這可以避免在性能方面可能很昂貴的DOM操作。

+0

ooohhh ....很好。 – seth 2009-07-30 00:58:35

1

$函數創建一個表示dom元素的jquery對象。你可以改變對象的屬性,但是這些改變不會在它所「表示」的元素中變爲aparent,除非jquery知道如何處理它(也許分配一個click事件處理程序)。

所以,當你做出第一個選擇時,它會修改你所做的對象,但不會對實際的html元素做任何事情。當您再次運行$時,它會創建一個SEPARATE對象,該對象不會保留您對第一個進行的屬性更改。

您可以直接作出變更HTML對象:(無jQuery的)

的getElementById( 「theid」)myprop = 「Hello World」 的;

產生:<p id="theid" myprop="hello world"></p>但設置jquery對象的屬性就不會這樣做。爲了在jQuery中獲得等效的效果,使用Ken Browning建議的.data方法。 (太晚了......):D

+0

非常感謝。這是很好的知道,但不是我一直在尋找。雖然,但是選票。 – 2009-07-30 01:10:38

1

我不確定這是否是由於jQuery的改變。但是我在問題中所描述的幾乎完成了...

var domElem = $('#selector'); 
domElem.myProp = "Hello world"; 

現在在我的情況下,我必須在方法調用以後使用這個對象:然後

<span onclick=\"SelectAll(domElem)\">Click me!</span> 

的方法可以這樣做:

function SelectAll(domElm){ 
    alert(domElm.myProp); 
} 

正如我所說的 - 它可能是jQuery引擎中的更新,但似乎不再需要.data()調用:-)

相關問題