修改jQuery对象

时间:2011-07-25 15:09:19

标签: jquery

我有一个<a>元素。然后我有一个关联的jQuery对象$("a"),我想修改它。所以我尝试以下方法:

$("a").myAttribute = 10;
alert($("a").myAttribute);    // <--- Alerts undefined

有什么问题?

4 个答案:

答案 0 :(得分:4)

每次使用$('a')都会返回一个不同的对象实例。虽然您的原始代码不起作用,但您应该能够:

var a = $('a');
a.myAttribute = 10;

alert(a.myAttribute.toString());

如果您确实想要将值添加到DOM以便以后可以使用它,那么“正确”的方法是使用attr方法(如果您正在设置有效的HTML属性)或数据方法(如果您想使用非标准名称):

// valid HTML attribute
$('a').attr('name', 'someName');

// non-standard name
$('a').data('myAttribute', 10);

然后是:

alert($('a').attr('name'));

或者:

alert($('a').data('myAttribute'));

如果你需要更复杂的东西(比如存储一个复杂的对象而不是简单的属性/数据值),我会考虑编写一个简单的jQuery插件来扩展jQuery对象并广告你的自定义对象所需的存储/检索方法

要开始使用一个简单的示例,请查看jQuery的插件创作页面:

Plugins/Authoring - jQuery

答案 1 :(得分:3)

你可以这样做:

 $("a").attr('myattribute', '10');//store the attribute

在任何情况下你都应该更好地捕捉它,因为你用$(“a”)来定位页面中的所有链接,所以最好的办法是:

 $("a#myid").attr('myattribute', '10');

如果您只需要保存与对象相关的数据,则应使用data()

 $("a#myid").data('myattribute', '10');
 //to retrieve it use
 var my = $("a#myid").data('myattribute')
 //you can still use 'a' for example a.hide() hides all links

编辑 - 如果你需要附加一个对象,你应该考虑这样做:

  var a = $('a');
  //use the reference from now on
  a.secondObject = SecondjQueryObject

答案 2 :(得分:0)

使用attr方法

$("a").attr('myattribute', 10);

答案 3 :(得分:0)

@nicola是对的,你应该使用attr。但是,要澄清未定义的原因。在代码中:

$("a").myAttribute = 10;
alert($("a").myAttribute);

第一个$("a")和第二个$("a")是两个独立的对象。每次调用$时,都会创建一个新对象。在这种情况下,这些对象碰巧拥有相同的元素集,但它们仍然是两个不同的对象。然后,您正在修改第一个对象并检查第二个对象是否存在修改。显然它没有。以下将实际执行您的期望:

var a = $("a");    
a.myAttribute = 10;
alert(a.myAttribute);

但这只会修改特定的javascript对象,而不会修改对象包含的元素。这就是您想要使用attr的原因。这实际上会将属性添加到底层元素。

我建议调查data,因为我发现它是一种更好的方法,然后创建任意属性。 http://api.jquery.com/jQuery.data/