var dom = new Object(); dom.core = new Object(); dom.event = new Object(); dom.ajax = new Object(); dom.misc = new Object(); /* ================================================================== ■コア =====================================================================*/ /* ------------------------------------------------------------------ [文法] dom.core.removeChildNodes(node) [説明] node配下の子要素すべてを削除する。 [引数] ・node 要素ノードオブジェクト [戻値] なし ------------------------------------------------------------------- */ dom.core.removeChildNodes = function(node) { while( node.hasChildNodes() ) { node.removeChild(node.lastChild); } } dom.core.getTextContent = function(node) { var text = ""; if(! node) { return text; } if(typeof node.textContent != "undefined") { text = node.textContent; } else if(typeof node.innerText != "undefined") { text = node.innerText; } else if( node.hasChildNodes() ) { for (var i = node.childNodes.length; i--;) { var o = node.childNodes.item(i); if(o.nodeType == 3) { text = o.nodeValue + text; } else { text = dom.core.getTextContent(o) + text; } } } return text; } /* ------------------------------------------------------------------ [文法] dom.core.childNodes(node) [説明] node配下の子要素のうち、ホワイトスペースノードを除外した要素リストを 取り出す。 [引数] ・node 要素ノードオブジェクト [戻値] ホワイトスペースノードを除く子要素の配列。nodeListインタフェースを エミュレートし、itemメソッドを実装。 ------------------------------------------------------------------- */ dom.core.childNodes = function(node) { /* ノードオブジェクトを格納する配列を初期化 */ var array = new Array(); /* nodeが与えられていなければ終了 */ if( ! node ) { return array; } /* 子要素が存在していなければ終了 */ if( ! node.hasChildNodes() ) { return array; }; /* 子要素を取得 */ var children = node.childNodes; /* 子要素をチェックし、配列に格納 */ for( var i=0; i 0 && right < winSize.width && top > 0 && bottom < winSize.height ) { targetElm.style.left = left + 'px'; targetElm.style.top = top + 'px'; /* 要素がブラウザーからはみ出すようであればドラッグ終了 */ } else { dragEnd(); } /* イベント伝播の抑止 */ dom.event.stopPropagation(evt); /* デフォルト・アクションの抑止 */ dom.event.preventDefault(evt); }; /* -----------------------------------*/ /* ドラッグ開始時のコールバック関数 */ /* -----------------------------------*/ var dragStart = function(evt) { /* ブラウザーウィンドウサイズ */ winSize = dom.misc.getWindowSize(); /* ドラッグ開始時のマウスの座標 */ mouseX = evt.clientX; mouseY = evt.clientY; /* ドラッグ開始時の要素の座標 */ targetX = targetElm.offsetLeft; targetY = targetElm.offsetTop; /* documentにmousemoveイベントリスナーをセット */ dom.event.addEventListener(document, 'mousemove', dragMove, false); /* documentにmouseupイベントリスナーをセット */ dom.event.addEventListener(document, 'mouseup', dragEnd, false); /* イベント伝播の抑止 */ dom.event.stopPropagation(evt); /* デフォルト・アクションの抑止 */ dom.event.preventDefault(evt); }; /* -----------------------------------*/ /* mousedownイベントリスナーをセット */ /* -----------------------------------*/ dom.event.addEventListener(dragableElm, 'mousedown', dragStart, false); } /* ================================================================== ■Ajax =====================================================================*/ /* ------------------------------------------------------------------ [文法] dom.ajax.httpGetRequest(url, callback) [説明] urlにHTTP GETリクエストを送り、通信が完了したらcallback関数を実行 [引数] ・url リクエスト先URL ・callback 通信が完了した時点で実行したい関数のオブジェクト。 通信が完了すると、第一引数にXMLHttpRequestオブジェクトをセット します。 [戻値] リクエスト送信に成功すればXMLHttpRequestオブジェクトを返します。 失敗すれば、nullを返します。 ------------------------------------------------------------------- */ dom.ajax.httpGetRequest = function(url, callback, headers) { /* XMLHttpRequestオブジェクトを生成 */ var oHttp = null; if(window.XMLHttpRequest) { oHttp = new XMLHttpRequest(); } else if(window.ActiveXObject) { try { oHttp = new window.ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) { return null; } } if( oHttp != null ) { /* HTTP GETリクエスト */ oHttp.open('GET', url, true); /* リクエストヘッダーをセット */ if( typeof(headers) == 'object' ) { for(var name in headers) { oHttp.setRequestHeader(name, headers[name]); } } /* 状態変化イベントのコールバック関数を定義 */ oHttp.onreadystatechange = function() { if (oHttp.readyState == 4) { callback(oHttp); } }; /* HTTP GETリクエスト送出 */ oHttp.send(null); } /* oHttpを返す */ return oHttp; } /* ================================================================== ■その他 =====================================================================*/ /* ------------------------------------------------------------------ [文法] dom.misc.getElementAbsPos(elm) [説明] ブラウザー表示領域左上端を基点とした座標系としたelmの左上端の座標を、 オブジェクトで返す。 [引数] ・elm 要素ノードオブジェクト [戻値] 座標を格納したオブジェクト。xプロパティにX座標の値が、yプロパティに Y座標の値がセットされる。 ------------------------------------------------------------------- */ dom.misc.getElementAbsPos = function(elm) { var obj = new Object(); obj.x = elm.offsetLeft; obj.y = elm.offsetTop; while(elm.offsetParent) { elm = elm.offsetParent; obj.x += elm.offsetLeft; obj.y += elm.offsetTop; } return obj; } /* ------------------------------------------------------------------ [文法] dom.misc.getWindowSize() [説明] ブラウザーのHTML表示領域のサイズをオブジェクトで返す。 [引数] なし [戻値] サイズを格納したオブジェクト。widthプロパティに横長の値が、height プロパティに縦長の値がセットされる。 ------------------------------------------------------------------- */ dom.misc.getWindowSize = function() { /* サイズを格納するオブジェクトを生成 */ var obj = new Object(); /* Internet Explorerの場合 */ if( document.uniqueID ) { obj.width = document.documentElement.clientWidth; obj.height = document.documentElement.clientHeight; /* それ以外の場合 */ } else { obj.width = window.innerWidth; obj.height = window.innerHeight; } /* サイズオブジェクトを返す */ return obj; };