3

特定のユーザーアクションで特定の要素のcss値を変更するjquery-pluginを書いています。他のアクションでは、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 データ関数を使用して要素に直接情報をアタッチし、簡単かつ一意にアクセスできるようにします。

次のようにします (<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

if anybody wants to see the plugin in action, see it here: http://www.sj-wien.at/leopoldstadt/zeug/marcel/slidlabel/jsproblem.html

于 2010-02-08T21:16:52.997 に答える
0

ああ、そうしないでください... :)

CSS を記述して and を使用するaddClassremoveClass、スタイルはそのまま残ります。

于 2010-02-08T17:56:07.090 に答える