5

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

我希望像这样向对象添加一个附加属性:

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

但这似乎不起作用。我试图在这个对象中存储一个值,以便以后可以引用它。

undefined但是,即使在我设置属性之后,下面的代码也会立即给我一个值。

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

此代码也不起作用:

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

有没有办法做到这一点?或者我是否需要将我的所有属性作为属性存储在 DOM 对象上$("#mydiv").attr("myprop", "some value")(这是不太理想的)。

谢谢!

4

3 回答 3

13

jQuery 通过该方法公开了属性包的概念data

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

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

这避免了在性能方面可能代价高昂的 DOM 操作。

于 2009-07-30T00:57:22.347 回答
1

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

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

您也许可以直接更改 html 对象:(不带 jquery)

getElementByID("theid").myprop = "你好世界";

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

于 2009-07-30T00:56:22.843 回答
1

我不确定这是否是由于 jQuery 的变化。但是我已经按照问题中的描述做了很多事情......

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

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

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

然后该方法可以这样做:

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

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

于 2012-10-09T08:32:50.817 回答