156 lines
3.9 KiB
JavaScript
156 lines
3.9 KiB
JavaScript
(function(window) {
|
|
var logger = getLogger('03-dom.js')
|
|
|
|
window.ge = function ge(id) {
|
|
return document.getElementById(id)
|
|
}
|
|
|
|
window.re = function re(el) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
if (el && el.parentNode) {
|
|
el.parentNode.removeChild(el)
|
|
}
|
|
}
|
|
|
|
window.ce = function ce(tagName, attr, style) {
|
|
if (arguments.length === 1 && typeof tagName == 'string') {
|
|
var div = document.createElement('div');
|
|
div.innerHTML = tagName;
|
|
return div.firstChild;
|
|
}
|
|
|
|
var el = document.createElement(tagName);
|
|
if (attr) {
|
|
extend(el, attr);
|
|
}
|
|
if (style) {
|
|
setStyle(el, style);
|
|
}
|
|
return el
|
|
}
|
|
|
|
window.insertAfter = function insertAfter(elem, refElem) {
|
|
return refElem.parentNode.insertBefore(elem, refElem.nextSibling);
|
|
}
|
|
|
|
window.show = function show(el, dsp) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
if (!el)
|
|
return logger.local('show').error('invalid element:', el)
|
|
if (!dsp)
|
|
dsp = el.tagName === 'SPAN' || el.tagName === 'A' ? 'inline' : 'block';
|
|
el.style.display = dsp;
|
|
}
|
|
|
|
window.hide = function hide(el) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
if (!el)
|
|
return logger.local('hide').error('invalid element:', el)
|
|
el.style.display = 'none';
|
|
}
|
|
|
|
window.visible = function visible(el) {
|
|
return getStyle(el, 'display') !== 'none';
|
|
}
|
|
|
|
window.toggle = function toggle(el) {
|
|
visible(el) ? hide(el) : show(el)
|
|
}
|
|
|
|
window.hasClass = function hasClass(el, name) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
return el && el.nodeType === 1 && (" " + el.className + " ").replace(/[\t\r\n\f]/g, " ").indexOf(" " + name + " ") >= 0
|
|
}
|
|
|
|
window.addClass = function addClass(el, name) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
if (!el)
|
|
return logger.local('addClass').warn('el is', el)
|
|
if (!hasClass(el, name))
|
|
el.className = (el.className ? el.className + ' ' : '') + name
|
|
}
|
|
|
|
window.removeClass = function removeClass(el, name) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
if (!el)
|
|
return logger.local('removeClass').warn('el is', el)
|
|
if (isArray(name)) {
|
|
for (var i = 0; i < name.length; i++)
|
|
removeClass(el, name[i]);
|
|
return;
|
|
}
|
|
el.className = ((el.className || '').replace((new RegExp('(\\s|^)' + name + '(\\s|$)')), ' ')).trim()
|
|
}
|
|
|
|
window.cancelEvent = function cancelEvent(evt) {
|
|
if (!evt)
|
|
return logger.local('cancelEvent').warn('cancelEvent: event is', evt)
|
|
|
|
if (evt.preventDefault) evt.preventDefault();
|
|
if (evt.stopPropagation) evt.stopPropagation();
|
|
|
|
evt.cancelBubble = true;
|
|
evt.returnValue = false;
|
|
|
|
return false;
|
|
}
|
|
|
|
window.setStyle = function setStyle(el, name, value) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
|
|
if (Array.isArray(el)) {
|
|
return el.forEach(function(el, i) {
|
|
setStyle(el, name, value);
|
|
});
|
|
}
|
|
|
|
if (isObject(name)) {
|
|
for (var k in name) {
|
|
var v = name[k];
|
|
setStyle(el, k, v);
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (typeof value === 'number'
|
|
&& name !== 'z-index'
|
|
&& ! /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i.test(name))
|
|
value += 'px';
|
|
|
|
el.style[toCamelCase(name)] = value;
|
|
}
|
|
|
|
/**
|
|
* @param {HTMLElement} el
|
|
* @param {String|Array} css
|
|
* @return
|
|
*/
|
|
window.getStyle = function getStyle(el, css) {
|
|
if (typeof el === 'string')
|
|
el = ge(el);
|
|
|
|
if (Array.isArray(css)) {
|
|
var result = {}
|
|
for (var i = 0; i < css.length; i++) {
|
|
var key = css[i]
|
|
result[key] = getStyle(el, key)
|
|
}
|
|
return result
|
|
}
|
|
|
|
if (window.getComputedStyle) {
|
|
var compStyle = window.getComputedStyle(el, '')
|
|
return compStyle.getPropertyValue(css)
|
|
} else if (el.currentStyle) {
|
|
return el.currentStyle[camelcase(css)]
|
|
}
|
|
}
|
|
})(window);
|