Tag Archive for 'dom'

25Marname属性付きのエレメントを生成する

エレメントに対してname属性を動的に付加する際に、element.setAttribute('name', name);とかelement.name = 'name';とかやってはみるものの、IEだとまともにname属性を付加してくれない。
そんな時は、DOM操作の範疇を逸して無理やりラップ。

  1. function createElementWithName(tag, name) {
  2.     var isIE =/*@cc_on!@*/false;
  3.     var element;
  4.     if (name) {
  5.         element = (isIE)? document.createElement('<' + tag + ' name="' + name + '">'): document.createElement(tag);
  6.         element.name = name;
  7.     } else {
  8.         element = document.createElement(tag);
  9.     }
  10.    
  11.     return element;
  12. }
/*@cc_on@*/とは?
IE限定の@cc_onステートメント。
"/*@cc_on"と"@*/"の間に書いたものをIE限定で認識してくれる。
この場合IEのみ"!"を認識するので、isIEはIEにおいてのみtrueとなる。

22MaraddEventListener/attachEventをラップする

イベントリスナのMOZ/IEのブラウザ間の差異を吸収。

  1. function setEventListener(element, type, listener) {
  2.     if (element.addEventListener) element.addEventListener(type, function(event){listener(this)}, false);
  3.     else if (element.attachEvent) element.attachEvent('on' + type, function(event){listener(event.srcElement)});
  4. }
element
document.getElementById('hoge')等で取得したDOM Element
type
イベントの種類。"click"とか"focus"とか"blur"とか。"on"抜きで渡しませう。
listener
イベントが起こったときに叩く関数名
ブラウザ間の差異
addEventListenerはMOZ/Safari
attachEventはIE

"テストする"というボタンをクリックした時に、ボタンの背景色を赤くするサンプル。

  1. var element = document.getElementById('button');
  2.  
  3. setEventListener(element, 'click', writeText);
  4.  
  5. function setEventListener(element, type, listener) {
  6.     if (element.addEventListener) element.addEventListener(type, function(event){listener(this)}, false);
  7.     else if (element.attachEvent) element.attachEvent('on' + type, function(event){listener(event.srcElement)});
  8. }
  9. function writeText(targetElement) {
  10.     targetElement.style.backgroundColor = 'red';
  11. }

イベントが起きたとき、リスナーであるwriteTextに引数としてtargetElementが渡される。
これは、イベントが起きたエレメント自身のことで、今回の場合はクリックされたボタン自身が渡されます。




Return to page top