我有一个<a>
元素。然后我有一个关联的jQuery对象$("a")
,我想修改它。所以我尝试以下方法:
$("a").myAttribute = 10;
alert($("a").myAttribute); // <--- Alerts undefined
有什么问题?
答案 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的插件创作页面:
答案 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/