8 document.getElementById ?
\r
10 return document.getElementById( id );
\r
14 return document.all[ id ];
\r
17 getElementsByTagName :
\r
18 document.getElementsByTagName ?
\r
19 (function( parent, tagName ){
\r
20 return parent.getElementsByTagName( tagName.toUpperCase() );
\r
23 (function( parent, tagName ){
\r
24 return parent.all.tags( tagName.toUpperCase() );
\r
27 getElementsByClassName :
\r
28 document.getElementsByClassName ?
\r
29 (function( parent, className ){
\r
30 return parent.getElementsByClassName( className );
\r
32 document.getElementsByTagName ?
\r
33 (function( parent, className ){
\r
35 live = parent.getElementsByTagName( '*' ),
\r
38 for( i = live.length; i; ){
\r
39 nodes[ --i ] = live[ i ];
\r
41 for( i = nodes.length; i; ){
\r
42 node = nodes[ --i ];
\r
43 ( node.nodeType !== 1 || !node.className || !node.className.length || self.hasClass( node, className ) === false ) && nodes.splice( i, 1 );
\r
48 (function( parent, className ){
\r
53 for( i = live.length; i; ){
\r
54 nodes[ --i ] = live[ i ];
\r
56 for( i = nodes.length; i; ){
\r
57 node = nodes[ --i ];
\r
58 ( !node.className || !node.className.length || self.hasClass( node, className ) === false ) && nodes.splice( i, 1 );
\r
63 hasClass : function( elm, className ){
\r
64 var cnames = ( elm.className || '' ).split( ' ' ),
\r
65 _cnames = className.split( ' ' ),
\r
69 cname = _cnames[ --i ];
\r
70 if( cname === '' ) continue;
\r
71 if( cnames.indexOf( cname ) === -1 ) return false;
\r
76 document.appendChild ?
\r
77 (function( target, elm ){
\r
78 return target.appendChild( elm );
\r
81 (function( target, elm ){
\r
82 return target.insertAdjacentHTML( 'BeforeEnd', elm.outerHTML || elm ); // elm の場合と string の場合がある
\r
86 document.removeChild ?
\r
87 (function( parent, elm ){
\r
88 return target.removeChild( elm );
\r
91 (function( parent, elm ){
\r
92 var children = X.Dom.getChildNodes( parent ),
\r
93 l = children.length,
\r
97 for( ; i < l; ++i ){
\r
98 child = children[ i ];
\r
99 if( child !== elm ){
\r
100 html[ html.length ] = child.outerHTML || child;
\r
105 if( !update ) return;
\r
106 parent.innerHTML = html.join( '' );
\r
110 document.insertBefore ?
\r
111 (function( parent, elm, elmAfter ){
\r
112 return parent.insertBefore( elm, elmAfter );
\r
115 (function( parent, elm, elmAfter ){
\r
116 return elmAfter.insertAdjacentHTML( 'BeforeBegin', elm.outerHTML );
\r
121 if( X.UA.IE && X.UA.IE < 5 ){
\r
123 * ie4 に TextNode は存在しない。 Element.children にテキストノードは無視される。
\r
124 * そこでテキストノードを判定して控える操作が必要になる。
\r
126 X.Dom.getChildNodes = function( elm ){
\r
127 var html = elm.innerHTML,
\r
128 children = elm.children,
\r
129 l = children.length - 1,
\r
131 cr = X.Dom.getCRChars( html ),
\r
132 i, j, child, outer, index, parts, ret, text;
\r
134 if( html.length ) return [ html ]; // new X.Dom.TextNode( html );
\r
139 html = html.split( cr ).join( _ );
\r
140 for( i = 0; i <= l; ++i ){
\r
141 child = children[ i ];
\r
142 outer = child.outerHTML.split( cr ).join( _ );
\r
143 index = html.indexOf( outer );
\r
144 if( index === -1 ){
\r
145 alert( 'X.Dom.getChildNodes\n' + outer + '\n' + html.substr( 0, 100 ) );
\r
149 ret[ ++j ] = html.substr( 0, index ); // new X.Dom.TextNode( html );
\r
151 ret[ ++j ] = child;
\r
152 html = html.substr( index + outer.length );
\r
153 if( i === l && html.length ){
\r
154 ret[ ++j ] = html; // new X.Dom.TextNode( html );
\r
160 X.Dom.getCRChars = function( src ){
\r
161 return 0 <= src.indexOf( '\r\n' ) ? '\r\n' :
\r
162 0 <= src.indexOf( '\n' ) ? '\n' :
\r
163 0 <= src.indexOf( '\r' ) ? '\r' : '\n';
\r