日期:2014-05-16 浏览次数:20600 次
在一些很小的项目里,连用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) );
}