2007-07-30
style.cssText の使い処に関する考察
cssText って知ってますか?
cssText っていいうのは CSSRule オブジェクトとか CSSStyleDeclaration が持っている情報を css ファイルに書く形式の文字列にしてくれる機能です。
乱暴に言ってしまえば、 css 系のオブジェクトが持っている innerHTML みたいなものです。
具体例を見てみましょう。
こんな感じの body があるときに
<body style="margin: 1em; padding: 1em; border: 1em">....</body>
こんな感じで使えます。
alert(document.body.style.cssText); // 'margin: 1em; padding: 1em; border: 1em'
簡単でしょう?(ボブ略
設定も出来ますよ
こんな感じ
// さっきの続き document.body.style.cssText = 'width: 100px'; alert(document.body.style.margin); // '' alert(document.body.style.padding); // '' alert(document.body.style.border); // '' alert(document.body.style.width); // '100px'
簡単でしょう?
クロスブラウザ?
Safari 3, Opera 9, Firefox 2, IE 6, IE 7 で動いたよ!
パフォーマンスは?
めっちゃ適当に計ってみたら、普通に style.width = '100px'; みたいに一個一個入れてくより、目安 2 〜 3 割遅いことが分かった。
で、
あんまり使う必要なくね?
うんうん。そう思う
でも
さっき便利な使い方を 3 つ思いついたので紹介します。
デバッグ時に値を見るとき
これは普通に便利。
いちち style.xxxx を書くのがめんどくさいとき
うん。あるある。
スタイルをキャッシュしておいて戻したりしたいとき(本題)
たとえば、キャッシュしておいて
var style = element.style; var cache = style.cssText;
いろいろいじっても、元に戻せる機能を付けたいとか。
style.cssText = cache; // これだけで元の style に戻せる。
便利!
ちなみに
実はこれよりもっと効率的な方法があるのですが、その方法は IE では動きませんでした。その方法は以下。
// キャッシュするとき var style = element.style; var cache = {}; for (var i = 0, l = style.length/*←IEではこれがない*/; i < l; i ++) { var n = style[i]; // ←IEではこれもない cache[n] = style[n]; } // 戻すとき for (var i = 0, l = style.length; i < l; i ++) { var n = style[i]; if (!(n in cache)) { // キャッシュにないプロパティは削除 style[n] = ''; } } for (var n in cache) style[n] = cache[n]; // キャッシュされてるものを戻す
長ったらしいけど、これが一番効率的だと思います。
もちろん、全プロパティを走査すれば簡単にキャッシュできるのですが、それだと激重です。
まとめ
トラックバック - http://d.hatena.ne.jp/amachang/20070730/1185788557
リンク元
- 221 http://b.hatena.ne.jp/
- 218 http://reader.livedoor.com/reader/
- 214 http://b.hatena.ne.jp/hotentry
- 169 http://d.hatena.ne.jp/
- 73 http://www.google.com/reader/view/
- 66 http://www.google.co.jp/ig?hl=ja
- 42 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLD,GGLD:2004-31,GGLD:ja&q=document.title
- 37 http://b.hatena.ne.jp/add?mode=confirm&title=IT%u6226%u8A18 - style.cssText %u306E%u4F7F%u3044%u51E6%u306B%u95A2%u3059%u308B%u8003%u5BDF&url=http://d.hatena.ne.jp/amachang/20070730/1185788557
- 35 http://b.hatena.ne.jp/hotentry?
- 34 http://b.hatena.ne.jp/entrylist?sort=hot
