日期:2014-05-16  浏览次数:20495 次

贡献一个连jquery都觉的大的时候可以用的 js库

在一些很小的项目里,连用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) );
                    }