如何将属性分配给jQuery对象?

时间:2009-07-30 00:50:40

标签: jquery arrays object jquery-1.3

据我所知,通过美元符号引用jQuery中的任何DOM元素(如:$("#mydiv")),返回一个对象。

我希望为对象添加一个额外的属性:

$("#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对象上(这是不太理想的)。

谢谢!

3 个答案:

答案 0 :(得分: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操作,这在性能方面可能很昂贵。

答案 1 :(得分:1)

$ function创建一个表示dom元素的jquery对象。您可以更改对象的属性,但这些更改不会在它“代表”的元素中变得明显,除非jquery知道如何处理它们(或许可以指定单击事件处理程序)。

因此,当您进行第一次选择时,它会修改您创建的对象,但不会对实际的html元素执行任何操作。当您再次运行$时,它会创建一个SEPARATE对象,该对象不会保留您对第一个进行的属性更改。

您可以直接更改html对象:(没有jquery)

getElementByID(“theid”)。myprop =“hello world”;

导致:<p id="theid" myprop="hello world"></p>但是设置jquery对象的属性不会这样做。要在jquery中获得等效效果,请使用Ken Browning建议的.data方法。 (太晚了......):D

答案 2 :(得分:1)

我不确定这是否是由于jQuery的变化。但我已经完成了问题中所描述的......

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

现在在我的情况下,我必须在稍后的方法调用中使用此对象:

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

该方法可以这样做:

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

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