165 lines
4.5 KiB
JavaScript
165 lines
4.5 KiB
JavaScript
/*global kampfer*/
|
|
kampfer.provide('dom');
|
|
|
|
kampfer.dom.create = function(name) {
|
|
return kampfer.global.document.createElement(name);
|
|
};
|
|
|
|
kampfer.dom.addClass = function(elem, value) {
|
|
|
|
var classNames, i, l,
|
|
setClass, c, cl;
|
|
|
|
if ( value && typeof value === "string" ) {
|
|
classNames = value.split( /\s+/ );
|
|
|
|
if ( elem.nodeType === 1 ) {
|
|
if ( !elem.className && classNames.length === 1 ) {
|
|
elem.className = value;
|
|
|
|
} else {
|
|
setClass = " " + elem.className + " ";
|
|
|
|
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
|
|
if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
|
|
setClass += classNames[ c ] + " ";
|
|
}
|
|
}
|
|
elem.className = setClass.trim();
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
|
|
kampfer.dom.removeClass = function(elem, value) {
|
|
|
|
var classNames, i, l, className, c, cl;
|
|
|
|
if ( (value && typeof value === "string") || value === undefined ) {
|
|
classNames = ( value || "" ).split( /\s+/ );
|
|
|
|
if ( elem.nodeType === 1 && elem.className ) {
|
|
if ( value ) {
|
|
className = (" " + elem.className + " ").replace( /[\n\t\r]/g, " " );
|
|
for ( c = 0, cl = classNames.length; c < cl; c++ ) {
|
|
className = className.replace(" " + classNames[ c ] + " ", " ");
|
|
}
|
|
//elem.className = kampfer.string.trim( className );
|
|
elem.className = className.trim();
|
|
} else {
|
|
elem.className = "";
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
kampfer.dom.getComputedStyle = function(element, property) {
|
|
var doc = kampfer.global.document;
|
|
if(doc.defaultView && doc.defaultView.getComputedStyle) {
|
|
var styles = doc.defaultView.getComputedStyle(element, null);
|
|
if(styles) {
|
|
// element.style[..] is undefined for browser specific styles
|
|
// as 'filter'.
|
|
return styles[property] || styles.getPropertyValue(property);
|
|
}
|
|
}
|
|
return '';
|
|
};
|
|
|
|
|
|
//for IE
|
|
kampfer.dom.getCascadedStyle = function(element, style) {
|
|
return element.currentStyle ? element.currentStyle[style] : null;
|
|
};
|
|
|
|
|
|
kampfer.dom.getStyle = function(element, style) {
|
|
return kampfer.dom.getComputedStyle(element, style) ||
|
|
kampfer.dom.getCascadedStyle(element, style) ||
|
|
element.style[style];
|
|
};
|
|
|
|
|
|
//需要输入正确的javascript格式名
|
|
//TODO 处理样式名
|
|
kampfer.dom.setStyle = function(element, name, value) {
|
|
if( kampfer.isDefAndNotNull(value) &&
|
|
kampfer.type(name) === 'string' ) {
|
|
element.style[name] = value;
|
|
} else if( kampfer.isObject(name) ) {
|
|
for(var attr in name) {
|
|
kampfer.dom.setStyle(element, attr, name[attr]);
|
|
}
|
|
}
|
|
};
|
|
|
|
// http://code.jquery.com/jquery-1.8.3.js
|
|
kampfer.dom.getWindow = function(elem) {
|
|
return kampfer.isWindow(elem) ?
|
|
elem :
|
|
elem.nodeType === 9 ?
|
|
elem.defaultView || elem.parentWindow :
|
|
false;
|
|
};
|
|
|
|
|
|
// http://code.jquery.com/jquery-1.8.3.js
|
|
kampfer.dom.scrollLeft = function(elem, val) {
|
|
var win = kampfer.dom.getWindow( elem ),
|
|
prop = 'pageXOffset',
|
|
method = 'scrollLeft';
|
|
|
|
if ( val === undefined ) {
|
|
return win ? (prop in win) ? win[ prop ] :
|
|
win.document.documentElement[ method ] :
|
|
elem[ method ];
|
|
}
|
|
|
|
if ( win ) {
|
|
win.scrollTo( val, kampfer.dom.scrollTop( win ));
|
|
} else {
|
|
elem[ method ] = val;
|
|
}
|
|
};
|
|
|
|
// http://code.jquery.com/jquery-1.8.3.js
|
|
kampfer.dom.scrollTop = function(elem, val) {
|
|
var win = kampfer.dom.getWindow( elem ),
|
|
prop = 'pageYOffset',
|
|
method = 'scrollTop';
|
|
|
|
if ( val === undefined ) {
|
|
return win ? (prop in win) ? win[ prop ] :
|
|
win.document.documentElement[ method ] :
|
|
elem[ method ];
|
|
}
|
|
|
|
if ( win ) {
|
|
win.scrollTo( kampfer.dom.scrollLeft( win ), val);
|
|
} else {
|
|
elem[ method ] = val;
|
|
}
|
|
};
|
|
|
|
|
|
//http://www.cnblogs.com/rubylouvre/archive/2011/05/30/1583523.html
|
|
kampfer.dom.contains = function(parent, child) {
|
|
if(parent.compareDocumentPosition) {
|
|
return parent === child || !!(parent.compareDocumentPosition(child) & 16);
|
|
}
|
|
|
|
if(parent.contains && child.nodeType === 1) {
|
|
return parent.contains(child) && parent !== child;
|
|
}
|
|
|
|
while( (child = child.parentNode) ) {
|
|
if(child === parent) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}; |