JavaScript/JQuery:在变量名中使用$(this)

JavaScript/JQuery:在变量名中使用$(this),javascript,jquery,internet-explorer,this,default-value,Javascript,Jquery,Internet Explorer,This,Default Value,我正在编写一个jquery插件,它在某些用户操作上更改某些元素的css值。 在其他操作中,css值应重置为其初始值 由于我找不到返回初始css值的方法,我只是创建了一个数组,在开始时存储所有初始值 我是这样做的: var initialCSSValue = new Array() 在我的插件开始的时候,以及后来,在某种设置循环中,我使用了我所有的元素 initialCSSValue[$(this)] = parseInt($(this).css('<CSS-attribute>')

我正在编写一个jquery插件,它在某些用户操作上更改某些元素的css值。 在其他操作中,css值应重置为其初始值

由于我找不到返回初始css值的方法,我只是创建了一个数组,在开始时存储所有初始值

我是这样做的:

var initialCSSValue = new Array()
在我的插件开始的时候,以及后来,在某种设置循环中,我使用了我所有的元素

initialCSSValue[$(this)] = parseInt($(this).css('<CSS-attribute>'));
代码中的其他地方。我想这是因为我使用了一个对象($(this))作为变量名

有办法解决这个问题吗


谢谢

用jQuery对象索引数组似乎有点可疑。我将使用对象的ID为数组设置键

initialCSSValue[$(this).attr("id")] = parseInt...
使用

起初,我打算建议使用ID和属性名的组合,但每个对象可能都没有ID。相反,使用jQuery数据函数将信息直接附加到元素,以便进行简单、唯一的访问

执行类似操作(其中
替换为css属性名):


哦,请不要那样做……:)


编写一些CSS并使用
addClass
removeClass
——之后样式保持不变

如果有人想看到插件的运行,请在此处查看:

这只有在您假设所有东西都有一个
id
时才有效,这是一个相当大的假设。谢谢!在这种情况下,使用ID似乎不是那么有利,因为某些元素可能在网页上出现两次。例如,如果我使用我的插件设计搜索输入的样式,那么在页面的侧栏和由同一搜索脚本生成的搜索页面的主要部分可能会有搜索输入。在这种情况下,我需要使用相同的ID两次-不可能。ID应该始终是唯一的。您可以键入另一个属性,但ID应该是最简单的。这似乎是一个绝妙的主意!我还不知道数据函数(我对jquery和javascript非常陌生),但我现在就开始阅读。谢谢你哇,它的效果很好,比我的第一个(缓慢的)解决方案更符合我的意图。@Marcel真棒!请务必将此答案标记为已接受。祝您的项目好运,欢迎使用Stack Overflow!有一件事:您正在实例化一个
数组
对象,但是您没有将它用作
数组
。您应该改为使用裸对象。在JavaScript中,数组由一个数字索引。如果不按数字编制索引,则不使用数组。JavaScript不是一种支持关联数组的语言。关于这个主题的更多信息(我找到的最好的资源):是的,你是对的-我还读到js中所谓的关联数组是对象,但不是真正的数组。我也考虑过这一点,事实上,如果没有人有更好的想法,我愿意这样做。但现在我对Doug Neiners“.data solution”非常满意,因为它完全实现了预期的功能。无论如何谢谢你!
initialCSSValue[$(this).attr("id")] = parseInt...
$(this).data('initial-<CSS-attribute>', parseInt( $(this).css('<CSS-attribute>') ) );
$(this).data('initial-<CSS-attribute>');
var saveCSS = function (el, css_attribute ) {
   var data = $(el).data('initial-css');
   if(!data) data = {};
   data[css_attribute] = $(el).css(css_attribute);
   $(el).data('initial-css', data);
}
var readCSS = function (el, css_attribute) {
   var data = $(el).data('initial-css');
   if(data && data[css_attribute])
     return data[css_attribute];
   else
     return "";
}