如何将属性分配给 jQuery 对象?
Posted
技术标签:
【中文标题】如何将属性分配给 jQuery 对象?【英文标题】:How can I assign a property to a jQuery object? 【发布时间】:2010-11-15 06:57:32 【问题描述】:据我了解,在 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 对象上(这不太理想)。
谢谢!
【问题讨论】:
我不认为你可以这样做......你可能不得不去你最后的声明...... 【参考方案1】:jQuery 使用 data
方法公开了属性包的概念。
// set some arbitrary data
$('#selector').data('example-property', exampleValue);
// get the value later
var theValue = $('#selector').data('example-property')
这避免了 DOM 操作,这在性能方面可能会很昂贵。
【讨论】:
非常感谢!这正是我一直在寻找的! :)【参考方案2】:$ 函数创建一个代表 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
【讨论】:
非常感谢。这很高兴知道,但不是我想要的。不过投票赞成。【参考方案3】:我不确定这是否是由于 jQuery 的变化。但是我已经按照问题中的描述做了很多事情......
var domElem = $('#selector');
domElem.myProp = "Hello world";
现在我必须在稍后的方法调用中使用这个对象:
<span onclick=\"SelectAll(domElem)\">Click me!</span>
然后该方法可以这样做:
function SelectAll(domElm)
alert(domElm.myProp);
正如我所说 - 它可能是 jQuery 引擎中的更新,但似乎不再需要 .data()
调用 :-)
【讨论】:
以上是关于如何将属性分配给 jQuery 对象?的主要内容,如果未能解决你的问题,请参考以下文章