/* *包含了一个Douglas Crockford对函数的method的扩展,下面的三个函数版权归Douglas Crockford所有,特此声明 */ Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; Function.method( inherits , function (parent) { var d = {}, p = (this.prototype = new parent()); this.method( base , function uber(name) { if (!(name in d)) { d[name] = 0; } var f, r, t = d[name], v = parent.prototype; if (t) { while (t) { v = v.constructor.prototype; t -= 1; } f = v[name]; } else { f = p[name]; if (f == this[name]) { f = v[name]; } } d[name] += 1; r = f.apply(this, Array.prototype.slice.apply(arguments, [1])); d[name] -= 1; return r; }); return this; }); Function.method( swiss , function (parent) { for (var i = 1; i < arguments.length; i += 1) { var name = arguments[i]; this.prototype[name] = parent.prototype[name]; } return this; });
/* * 解决IE不支持HTMLElement的一个解决方案 */ var DOMElement ={ extend: function(name,fn) { if(!document.all) { eval("HTMLElement.prototype." + name + " = fn"); } else { var _createElement = document.createElement; document.createElement = function(tag) { var _elem = _createElement(tag); eval("_elem." + name + " = fn"); return _elem; } var _getElementById = document.getElementById; document.getElementById = function(id) { var _elem = _getElementById(id); eval("_elem." + name + " = fn"); return _elem; } var _getElementsByTagName = document.getElementsByTagName; document.getElementsByTagName = function(tag) { var _arr = _getElementsByTagName(tag); for(var _elem=0;_elem<_arr.length;_elem++) eval("_arr[_elem]." + name + " = fn"); return _arr; } } } }; /* * 下面仿照jQuery之父John Resig的几个查询DOM的函数,连缀的能力 */ DOMElement.extend("previous",function(){ // similar to previousSibling DOM Function var elem=this; do{ elem=elem.previousSibling; }while(elem&&elem.nodeType!=1); return elem; });
DOMElement.extend("next",function(){ //similar to nextSibling DOm Function var elem=this; do{ elem=elem.nextSibling; }while(elem&&elem.nodeType!=1); return elem; }); DOMElement.extend("first",function(num){ //similar to firstChild DOM Function,同parent var elem=this; num=num||1; for (var i = 0; i < num; i++) { elem = elem.firstChild; } return (elem && elem.nodeType!=1 ? next(elem):elem); }); DOMElement.extend("last",function(num){ //similar to lastChild DOM Function,同parent var elem=this; num=num||1; for (var i = 0; i < num; i++) { elem = elem.lastChild; } return (elem && elem.nodeType!=1 ? prev(elem):elem); }); DOMElement.extend("parent",function(num){ //可以返回几个num等级的parentNode,比如:parent(2)就等同于elem.parent().parent(); var elem=this; num=num ||1; for (var i = 0; i < num; i++) { if (elem != null) { elem = elem.parentNode; } } return elem; }); DOMElement.extend("hasChilds",function(){ //判断时候有子节点 if(this!=null && this.hasChildNodes()){ return true; } else{ return false; } });