2008/09/09(火)IEとFFの互換性を維持するために
片方にあったり無かったりするメソッドやプロパティを何とかするためのメモ。
無い場合はundefinedとか返されるので || で繋いでしまえばなんとかなることが多い。
メモ書きなので間違えてるかも。
でも、
x = obj.yyy || obj.zzz;
って書く分には逆でも問題なかったりする。
そのうちいろいろ追加したりすると思う。
プロパティまわり
IE | FF | 用途 |
---|---|---|
innerText | textContent | エレメントの中のテキストのみ取り出す |
e.srcElement | e.target | イベントの発生元 |
tagName | localName | タグの名前(AとかIMGとか)* |
obj.currentStyle | document.defaultView.getComputedStyle(obj, '') | 実際に表示されているスタイル |
clientHeight | offsetHeight | エレメントの高さ |
clientWidth | offsetWidth | エレメントの幅 |
* Safari, Google ChromeはlocalNameは小文字で、tagNameは大文字で返すっぽい
イベントまわり
デフォルトの動作を止める
_preventDefault = function (ev){ if(IsIE) ev.returnValue = false; else ev.preventDefault(); }
これ以上次の要素にイベントを送らない
但し、IEとFFではイベントの発生順が逆なので注意
_stopPropagation = function (ev){ if(ADIARY.IsIE) ev.cancelBubble = true; else ev.stopPropagation(); }
エレメントのイベントにメソッドを割り当てる
クリックとかいろいろ。
但し、無名関数を登録すると取り除けなくなるので注意*1
addEvent = function (target, name, func) { if(target == undefined || name == '' || func == undefined) return; if(target.addEventListener) target.addEventListener(name, func, false); else if(target.attachEvent) target.attachEvent('on'+name, func); else return false;// setAttribute('on'+name, func); return true; }
エレメントのイベントからメソッドを取り除く
上のaddEventで追加したやつ限定
delEvent = function (target, name, func) { if(target == undefined || name == '' || func == undefined) return; if(target.removeEventListener) target.removeEventListener(name, func, false); else if(target.detachEvent) target.detachEvent) ('on'+name, func); else return false;// setAttribute('on'+name, ''); return true; }