日期:2014-05-16 浏览次数:20495 次
在一些很小的项目里,连用jquery都还觉的大的时候,你就可以用我的这个库了。
一个库或者框架,是应需求而生的,当你的项目实际上只需要简单的一个好用的选择器 一个ajax 封装 一个兼容的事件封装的时候,你当然就会觉的jquery都太臃肿了,好吧,我那jquery剥离了这几个功能出来,本来我是只剥离jquery的domready 的, 但是发现这个东西牵扯到了jquery的事件模型的封装,那我就把jquery的事件也一并的剥离了下来,然后自己写了一个ajax封装。ok,一个最简单的js开发库成型了。代码在下面:
/* * 简易的开发js库 暂命名为 --- 呃没有命名 * $选择器,ajax,event模块,dom.ready()方法 * 该js library 暂时不能和同样用$符号注册window标志符的js framework or library比如jquery等协作,会有命名空间冲突 */ (function(scope){ var _my_library=scope.my_library,_$=scope.$; var my_library=scope.my_library=scope.$=function(selector,context){ return my_library.fn.init(selector,context); } var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/; // 简单的判断是一个html片段or是一个dom的id //undefined;//定义一个局部的undefined my_library.fn = { init : function(selector,context){ selector = selector || document; if(selector.nodeType){ return selector; } if ( typeof selector == "string" ) { var match = quickExpr.exec( selector ); if ( match && (match[1] || !context) ) { if ( match[1] ){ //return new String(selector); var temp = document.createElement('div'), frag = document.createDocumentFragment(); temp.innerHTML = selector; (function(){ if(temp.firstChild) { frag.appendChild(temp.firstChild); arguments.callee(); } })(); //传入的为html串,则返回包含该html串的documentfragmet文档碎片 return frag; } else { var elem = document.getElementById( match[3] ); if ( elem ) return elem; return undefined; } } else var $ret=PetQuery(selector,context); return $ret.length==0 ? undefined : $ret; } else if (my_library.isFunction(selector)){ my_library.ready( selector,document); //如果传入的是方法,那么就自动启动ready加栽执行 } } }; var PetQuery = (function(){ //pet query javascript选择器 begin var snack = /(?:[\w\-\\.#]+)+(?:\[\w+?=([\'"])?(?:\\\1|.)+?\1\])?|\*|>/ig, exprClassName = /^(?:[\w\-_]+)?\.([\w\-_]+)/, exprId = /^(?:[\w\-_]+)?#([\w\-_]+)/, exprNodeName = /^([\w\*\-_]+)/, na = [null,null]; function _find(selector, context) { context = context || document; var simple = /^[\w\-_#]+$/.test(selector); if (!simple && context.querySelectorAll) { return realArray(context.querySelectorAll(selector)); } if (selector.indexOf(',') > -1) { var split = selector.split(/,/g), ret = [], sIndex = 0, len = split.length; for(; sIndex < len; ++sIndex) { ret = ret.concat( _find(split[sIndex], context) ); }