3

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

由于我没有办法取回初始的 css 值,所以我只是创建了一个数组来存储所有初始值。

我这样做了:

var initialCSSValue = new Array()

在我的插件开始时,后来,在某种设置循环中,我使用了所有元素都可以访问的地方

initialCSSValue[$(this)] = parseInt($(this).css('<CSS-attribute>'));

这在 Firefox 中运行良好。但是,我刚刚发现,IE(甚至 v8)在再次使用访问某个值时存在问题

initialCSSValue[$(this)]

代码中的其他地方。我认为这是因为我使用对象 ($(this)) 作为变量名。

有没有办法解决这个问题?

谢谢

4

4 回答 4

2

采用$(this).data()

起初我建议使用 ID 和属性名称的组合,但每个对象可能没有 ID。相反,使用 jQuery Data 函数将信息直接附加到元素上,以便轻松、独特地访问。

做这样的事情(其中<CSS-attribute>替换为 css 属性名称):

$(this).data('initial-<CSS-attribute>', parseInt( $(this).css('<CSS-attribute>') ) );

然后你可以像这样再次访问它:

$(this).data('initial-<CSS-attribute>');

另一种使用方式data

如果您想避免过多data使用,可以在您的插件中创建一个像这样的小辅助函数:

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 "";
}
于 2010-02-08T17:35:06.780 回答
1

用 jQuery 对象索引数组似乎很可疑。我会使用对象的 ID 来键入数组。

initialCSSValue[$(this).attr("id")] = parseInt...
于 2010-02-08T17:34:25.663 回答
0

哦,拜托,不要那样做... :)

编写一些 CSS 并使用addClassand removeClass- 之后保持样式不变。

于 2010-02-08T17:56:07.090 回答
0

如果有人想查看该插件的运行情况,请在此处查看: http ://www.sj-wien.at/leopoldstadt/zeug/marcel/slidlabel/jsproblem.html

于 2010-02-08T21:16:52.997 回答