📄 util.js
字号:
// small but works-for-me stuff for testing javascripts// not ready for "production" useObject.inspect = function(obj) { var info = []; if(typeof obj=="string" || typeof obj=="number") { return obj; } else { for(property in obj) if(typeof obj[property]!="function") info.push(property + ' => "' + obj[property] + '"'); } return ("'" + obj + "' #" + typeof obj + ": {" + info.join(", ") + "}");}// borrowed from http://www.schuerig.de/michael/javascript/stdext.js// Copyright (c) 2005, Michael Schuerig, michael@schuerig.deArray.flatten = function(array, excludeUndefined) { if (excludeUndefined === undefined) { excludeUndefined = false; } var result = []; var len = array.length; for (var i = 0; i < len; i++) { var el = array[i]; if (el instanceof Array) { var flat = el.flatten(excludeUndefined); result = result.concat(flat); } else if (!excludeUndefined || el != undefined) { result.push(el); } } return result;};if (!Array.prototype.flatten) { Array.prototype.flatten = function(excludeUndefined) { return Array.flatten(this, excludeUndefined); }}/*--------------------------------------------------------------------------*/var Builder = { node: function(elementName) { var element = document.createElement(elementName); // attributes (or text) if(arguments[1]) { if(this._isStringOrNumber(arguments[1]) || (arguments[1] instanceof Array)) this._children(element, arguments[1]); else this._attributes(element, arguments[1]); } // text, or array of children if(arguments[2]) this._children(element, arguments[2]); return element; }, _text: function(text) { return document.createTextNode(text); }, _attributes: function(element, attributes) { for(attribute in attributes) if(this._isStringOrNumber(attributes[attribute])) element.setAttribute( attribute=='className' ? 'class' : attribute, attributes[attribute]); }, _children: function(element, children) { if(typeof children=='object') { // array can hold nodes and text children = children.flatten(); for(var i = 0; i<children.length; i++) if(typeof children[i]=='object') element.appendChild(children[i]); else if(this._isStringOrNumber(children[i])) element.appendChild(this._text(children[i])); } else if(this._isStringOrNumber(children)) element.appendChild(this._text(children)); }, _isStringOrNumber: function(param) { return(typeof param=='string' || typeof param=='number'); }}/* ------------- element ext -------------- */// adapted from http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp// note: Safari return null on elements with display:none; see http://bugzilla.opendarwin.org/show_bug.cgi?id=4125// instead of "auto" values returns null so it's easier to use with || constructsString.prototype.camelize = function() { var oStringList = this.split('-'); if(oStringList.length == 1) return oStringList[0]; var ret = this.indexOf("-") == 0 ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) : oStringList[0]; for(var i = 1, len = oStringList.length; i < len; i++){ var s = oStringList[i]; ret += s.charAt(0).toUpperCase() + s.substring(1) } return ret;}Element.getStyle = function(element, style) { element = $(element); var value = element.style[style.camelize()]; if(!value) if(document.defaultView && document.defaultView.getComputedStyle) { var css = document.defaultView.getComputedStyle(element, null); value = (css!=null) ? css.getPropertyValue(style) : null; } else if(element.currentStyle) { value = element.currentStyle[style.camelize()]; } if(value=='auto') value = null; return value;}Element.makePositioned = function(element) { element = $(element); if(Element.getStyle(element, 'position')=='static') element.style.position = "relative";}Element.makeClipping = function(element) { element = $(element); element._overflow = Element.getStyle(element, 'overflow') || 'visible'; if(element._overflow!='hidden') element.style.overflow = 'hidden';}Element.undoClipping = function(element) { element = $(element); if(element._overflow!='hidden') element.style.overflow = element._overflow;}/*--------------------------------------------------------------------------*/Position.absolutize = function(element) { element = $(element); if(element.style.position=='absolute') return; Position.prepare(); var offsets = Position.cumulativeOffset(element); var top = offsets[1]; var left = offsets[0]; var width = element.clientWidth; var height = element.clientHeight; element._originalLeft = left - parseFloat(element.style.left || 0); element._originalTop = top - parseFloat(element.style.top || 0); element._originalWidth = element.style.width; element._originalHeight = element.style.height; element.style.position = 'absolute'; element.style.top = top + 'px';; element.style.left = left + 'px';; element.style.width = width + 'px';; element.style.height = height + 'px';;}Position.relativize = function(element) { element = $(element); if(element.style.position=='relative') return; Position.prepare(); element.style.position = 'relative'; var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); element.style.top = top + 'px'; element.style.left = left + 'px'; element.style.height = element._originalHeight; element.style.width = element._originalWidth;}/*--------------------------------------------------------------------------*/Element.Class = { // Element.toggleClass(element, className) toggles the class being on/off // Element.toggleClass(element, className1, className2) toggles between both classes, // defaulting to className1 if neither exist toggle: function(element, className) { if(Element.Class.has(element, className)) { Element.Class.remove(element, className); if(arguments.length == 3) Element.Class.add(element, arguments[2]); } else { Element.Class.add(element, className); if(arguments.length == 3) Element.Class.remove(element, arguments[2]); } }, // gets space-delimited classnames of an element as an array get: function(element) { element = $(element); return element.className.split(' '); }, // functions adapted from original functions by Gavin Kistner remove: function(element) { element = $(element); var regEx; for(var i = 1; i < arguments.length; i++) { regEx = new RegExp("^" + arguments[i] + "\\b\\s*|\\s*\\b" + arguments[i] + "\\b", 'g'); element.className = element.className.replace(regEx, '') } }, add: function(element) { element = $(element); for(var i = 1; i < arguments.length; i++) { Element.Class.remove(element, arguments[i]); element.className += (element.className.length > 0 ? ' ' : '') + arguments[i]; } }, // returns true if all given classes exist in said element has: function(element) { element = $(element); if(!element || !element.className) return false; var regEx; for(var i = 1; i < arguments.length; i++) { regEx = new RegExp("\\b" + arguments[i] + "\\b"); if(!regEx.test(element.className)) return false; } return true; }, // expects arrays of strings and/or strings as optional paramters // Element.Class.has_any(element, ['classA','classB','classC'], 'classD') has_any: function(element) { element = $(element); if(!element || !element.className) return false; var regEx; for(var i = 1; i < arguments.length; i++) { if((typeof arguments[i] == 'object') && (arguments[i].constructor == Array)) { for(var j = 0; j < arguments[i].length; j++) { regEx = new RegExp("\\b" + arguments[i][j] + "\\b"); if(regEx.test(element.className)) return true; } } else { regEx = new RegExp("\\b" + arguments[i] + "\\b"); if(regEx.test(element.className)) return true; } } return false; }, childrenWith: function(element, className) { var children = $(element).getElementsByTagName('*'); var elements = new Array(); for (var i = 0; i < children.length; i++) { if (Element.Class.has(children[i], className)) { elements.push(children[i]); break; } } return elements; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -