如何将属性分配给 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章

打字稿如何将ajax对象分配给属性? [复制]

过滤后如何将分配的属性保留给查询集对象?备择方案?

如何将一个对象数组的一个属性的值分配给另一个对象数组的同名属性? - Javascript

如何在 TypeScript 中为对象动态分配属性?

如何在 TypeScript 中为对象动态分配属性?

如何在plsql中将对象类型属性的值分配给具有相同属性属性的不同对象类型?