📄 dom.js
字号:
return elements; }, _newCallStack: function (path, once) { var rval = function () { var callStack = arguments.callee.callStack; for (var i = 0; i < callStack.length; i++) { if (callStack[i].apply(this, arguments) === false) { break; } } if (once) { try { this[path] = null; } catch (e) { // pass } } }; rval.callStack = []; return rval; }, addToCallStack: function (target, path, func, once) { var self = MochiKit.DOM; var existing = target[path]; var regfunc = existing; if (!(typeof(existing) == 'function' && typeof(existing.callStack) == "object" && existing.callStack !== null)) { regfunc = self._newCallStack(path, once); if (typeof(existing) == 'function') { regfunc.callStack.push(existing); } target[path] = regfunc; } regfunc.callStack.push(func); }, addLoadEvent: function (func) { var self = MochiKit.DOM; self.addToCallStack(self._window, "onload", func, true); }, focusOnLoad: function (element) { var self = MochiKit.DOM; self.addLoadEvent(function () { element = self.getElement(element); if (element) { element.focus(); } }); }, setElementClass: function (element, className) { var self = MochiKit.DOM; var obj = self.getElement(element); if (self.attributeArray.compliant) { obj.setAttribute("class", className); } else { obj.setAttribute("className", className); } }, toggleElementClass: function (className/*, element... */) { var self = MochiKit.DOM; for (var i = 1; i < arguments.length; i++) { var obj = self.getElement(arguments[i]); if (!self.addElementClass(obj, className)) { self.removeElementClass(obj, className); } } }, addElementClass: function (element, className) { var self = MochiKit.DOM; var obj = self.getElement(element); var cls = obj.className; // trivial case, no className yet if (cls.length === 0) { self.setElementClass(obj, className); return true; } // the other trivial case, already set as the only class if (cls == className) { return false; } var classes = obj.className.split(" "); for (var i = 0; i < classes.length; i++) { // already present if (classes[i] == className) { return false; } } // append class self.setElementClass(obj, cls + " " + className); return true; }, removeElementClass: function (element, className) { var self = MochiKit.DOM; var obj = self.getElement(element); var cls = obj.className; // trivial case, no className yet if (cls.length === 0) { return false; } // other trivial case, set only to className if (cls == className) { self.setElementClass(obj, ""); return true; } var classes = obj.className.split(" "); for (var i = 0; i < classes.length; i++) { // already present if (classes[i] == className) { // only check sane case where the class is used once classes.splice(i, 1); self.setElementClass(obj, classes.join(" ")); return true; } } // not found return false; }, swapElementClass: function (element, fromClass, toClass) { var obj = MochiKit.DOM.getElement(element); var res = MochiKit.DOM.removeElementClass(obj, fromClass); if (res) { MochiKit.DOM.addElementClass(obj, toClass); } return res; }, hasElementClass: function (element, className/*...*/) { var obj = MochiKit.DOM.getElement(element); var classes = obj.className.split(" "); for (var i = 1; i < arguments.length; i++) { var good = false; for (var j = 0; j < classes.length; j++) { if (classes[j] == arguments[i]) { good = true; break; } } if (!good) { return false; } } return true; }, escapeHTML: function (s) { return s.replace(/&/g, "&" ).replace(/"/g, """ ).replace(/</g, "<" ).replace(/>/g, ">"); }, toHTML: function (dom) { return MochiKit.DOM.emitHTML(dom).join(""); }, emitHTML: function (dom, /* optional */lst) { if (typeof(lst) == 'undefined' || lst === null) { lst = []; } // queue is the call stack, we're doing this non-recursively var queue = [dom]; var self = MochiKit.DOM; var escapeHTML = self.escapeHTML; var attributeArray = self.attributeArray; while (queue.length) { dom = queue.pop(); if (typeof(dom) == 'string') { lst.push(dom); } else if (dom.nodeType == 1) { // we're not using higher order stuff here // because safari has heisenbugs.. argh. // // I think it might have something to do with // garbage collection and function calls. lst.push('<' + dom.nodeName.toLowerCase()); var attributes = []; var domAttr = attributeArray(dom); for (var i = 0; i < domAttr.length; i++) { var a = domAttr[i]; attributes.push([ " ", a.name, '="', escapeHTML(a.value), '"' ]); } attributes.sort(); for (i = 0; i < attributes.length; i++) { var attrs = attributes[i]; for (var j = 0; j < attrs.length; j++) { lst.push(attrs[j]); } } if (dom.hasChildNodes()) { lst.push(">"); // queue is the FILO call stack, so we put the close tag // on first queue.push("</" + dom.nodeName.toLowerCase() + ">"); var cnodes = dom.childNodes; for (i = cnodes.length - 1; i >= 0; i--) { queue.push(cnodes[i]); } } else { lst.push('/>'); } } else if (dom.nodeType == 3) { lst.push(escapeHTML(dom.nodeValue)); } } return lst; }, setDisplayForElement: function (display, element/*, ...*/) { var m = MochiKit.Base; var elements = m.extend(null, arguments, 1); MochiKit.Iter.forEach( m.filter(null, m.map(MochiKit.DOM.getElement, elements)), function (element) { element.style.display = display; } ); }, scrapeText: function (node, /* optional */asArray) { var rval = []; (function (node) { var cn = node.childNodes; if (cn) { for (var i = 0; i < cn.length; i++) { arguments.callee.call(this, cn[i]); } } var nodeValue = node.nodeValue; if (typeof(nodeValue) == 'string') { rval.push(nodeValue); } })(MochiKit.DOM.getElement(node)); if (asArray) { return rval; } else { return rval.join(""); } }, __new__: function (win) { var m = MochiKit.Base; this._document = document; this._window = win; this.domConverters = new m.AdapterRegistry(); var __tmpElement = this._document.createElement("span"); var attributeArray; if (__tmpElement && __tmpElement.attributes && __tmpElement.attributes.length > 0) { // for braindead browsers (IE) that insert extra junk var filter = m.filter; attributeArray = function (node) { return filter(attributeArray.ignoreAttrFilter, node.attributes); }; attributeArray.ignoreAttr = {}; MochiKit.Iter.forEach(__tmpElement.attributes, function (a) { attributeArray.ignoreAttr[a.name] = a.value; }); attributeArray.ignoreAttrFilter = function (a) { return (attributeArray.ignoreAttr[a.name] != a.value); }; attributeArray.compliant = false; attributeArray.renames = { "class": "className", "checked": "defaultChecked", "usemap": "useMap", "for": "htmlFor" }; } else { attributeArray = function (node) { /*** Return an array of attributes for a given node, filtering out attributes that don't belong for that are inserted by "Certain Browsers". ***/ return node.attributes; }; attributeArray.compliant = true; attributeArray.renames = {}; } this.attributeArray = attributeArray; // shorthand for createDOM syntax var createDOMFunc = this.createDOMFunc; this.UL = createDOMFunc("ul"); this.OL = createDOMFunc("ol"); this.LI = createDOMFunc("li"); this.TD = createDOMFunc("td"); this.TR = createDOMFunc("tr"); this.TBODY = createDOMFunc("tbody"); this.THEAD = createDOMFunc("thead"); this.TFOOT = createDOMFunc("tfoot"); this.TABLE = createDOMFunc("table"); this.TH = createDOMFunc("th"); this.INPUT = createDOMFunc("input"); this.SPAN = createDOMFunc("span"); this.A = createDOMFunc("a"); this.DIV = createDOMFunc("div"); this.IMG = createDOMFunc("img"); this.BUTTON = createDOMFunc("button"); this.TT = createDOMFunc("tt"); this.PRE = createDOMFunc("pre"); this.H1 = createDOMFunc("h1"); this.H2 = createDOMFunc("h2"); this.H3 = createDOMFunc("h3"); this.BR = createDOMFunc("br"); this.HR = createDOMFunc("hr"); this.LABEL = createDOMFunc("label"); this.TEXTAREA = createDOMFunc("textarea"); this.FORM = createDOMFunc("form"); this.P = createDOMFunc("p"); this.SELECT = createDOMFunc("select"); this.OPTION = createDOMFunc("option"); this.OPTGROUP = createDOMFunc("optgroup"); this.LEGEND = createDOMFunc("legend"); this.FIELDSET = createDOMFunc("fieldset"); this.STRONG = createDOMFunc("strong"); this.CANVAS = createDOMFunc("canvas"); this.hideElement = m.partial(this.setDisplayForElement, "none"); this.showElement = m.partial(this.setDisplayForElement, "block"); this.removeElement = this.swapDOM; this.$ = this.getElement; this.EXPORT_TAGS = { ":common": this.EXPORT, ":all": m.concat(this.EXPORT, this.EXPORT_OK) }; m.nameFunctions(this); }});MochiKit.DOM.__new__(((typeof(window) == "undefined") ? this : window));//// XXX: Internet Explorer blows//if (!MochiKit.__compat__) { withWindow = MochiKit.DOM.withWindow; withDocument = MochiKit.DOM.withDocument;}MochiKit.Base._exportSymbols(this, MochiKit.DOM);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -