据我所知,通过美元符号引用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对象上(这是不太理想的)。
谢谢!
答案 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()
调用: - )