JavaScript 常用函数库详解


Posted in Javascript onOctober 21, 2009

为此,收集了自己平时常用到一些JavaScript函数,它们在其它的JS库也常见,现在整理并附上注释,方便查阅,希望对大家有所帮助。
注:假设以下所有函数都放在一个CC对象中,方便引用。

//这个方法相信是最常用的了, 
//它虽然没有选择器那么强大,但也有个小增强版,可查指定结点下ID所在的子元素 
function $(id, p) { 
//id是否是字符串,还是一个HTML结点 
var iss = id instanceof String || typeof id == "string"; 
if (iss && !p) 
return document.getElementById(id); 
//如果是结点的话就直接返回该结点 
if(!iss) 
return id; 
//如果id与p是同一个元素,直接返回 
if(p.id == id) 
return p; 
//往父结点搜索 
var child = p.firstChild; 
while (child) { 
if (child.id == id) 
return child; 
//递归搜索 
var v = this.$(id, child); 
if (v) 
return v; 
child = child.nextSibling; 
} 
//的确找不到就返回null 
return null; 
}

each: function(object, callback, args) { 
if (!object) { 
return object; 
} 
if (args) { 
if (object.length === undefined) { 
for (var name in object) 
if (callback.apply(object[name], args) === false) break; 
} else for (var i = 0, length = object.length; i < length; i++) 
if (callback.apply(object[i], args) === false) break; 
} else { 
if (object.length == undefined) { 
for (var name in object) 
if (callback.call(object[name], name, object[name]) === false) break; 
} else for (var i = 0, length = object.length, value = object[0]; 
i < length && callback.call(value, i, value) !== false; 
value = object[++i]) {} 
} 
return object; 
}

//数组 
function isArray(obj) { 
return (typeof obj === "array" || obj instanceof Array); 
}, 
//字符串 
function isString(obj) { 
return (typeof obj === "string" || obj instanceof String); 
}, 
//函数 
function isFunction(obj) { 
return (typeof obj === "function" || obj instanceof Function); 
}, 
//数字类型 
function isNumber(ob) { 
return (typeof ob === "number" || ob instanceof Number ); 
}

// 返回表单可提交元素的提交字符串. 
// 例如 
// <form> 
// <input type="text" name="user" value="rock" /> 
// <input type="text" name="password" value="123" /> 
// </form> 
// 调用后就返回 user=rock&password=123 
// 这些数据已经过encodeURIComponent处理,对非英文字符友好. 
// form元素中如果没有name,则以id作为提供字符名. 
function formQuery(f){ 
// f,一个Form表单. 
var formData = "", elem = "", f = CC.$(f); 
var elements = f.elements; 
var length = elements.length; 
for (var s = 0; s < length; ++s) { 
elem = elements[s]; 
if (elem.tagName == 'INPUT') { 
if ( (elem.type == 'radio' || elem.type == 'checkbox') && !elem.checked) { 
continue; 
} 
} 
if (formData != "") { 
formData += "&"; 
} 
formData += encodeURIComponent(elem.name||elem.id) + "=" 
+ encodeURIComponent(elem.value); 
} 
return formData; 
}

/** 
* 移除数组指定元素. 
* 参数既可传递一个整形下标,也可传递一个数组数据. 
*/ 
Array.prototype.remove = (function(p) { 
//参数为下标 
if (CC.isNumber(p)) { 
if (p < 0 || p >= this.length) { 
throw "Index Of Bounds:" + this.length + "," + p; 
} 
this.splice(p, 1)[0]; 
return this.length; 
} 
//参数为数组数据,最终要找到下标来操作 
if (this.length > 0 && this[this.length - 1] == p) { 
this.pop(); 
} else { 
var pos = this.indexOf(p); 
if (pos != -1) { 
this.splice(pos, 1)[0]; 
} 
} 
return this.length; 
});

Array.prototype.indexOf = (function(obj) { 
for (var i = 0, length = this.length; i < length; i++) { 
if (this[i] == obj) return i; 
} 
return - 1; 
});

/** 
* 万能而简单的表单验证函数,这个函数利用了JS动态语言特性,看上去很神秘, 
* 实际是很形象的,查看个例子就清楚了. 
*/ 
validate: function() { 
var args = CC.$A(arguments), 
form = null; 
//form如果不为空元素,应置于第一个参数中. 
if (!CC.isArray(args[0])) { 
form = CC.$(args[0]); 
args.remove(0); 
} 
//如果存在设置项,应置于最后一个参数中. 
//cfg.queryString = true|false; 
//cfg.callback = function 
//cfg.ignoreNull 
//nofocus:true|false 
var b = CC.isArray(b) ? {}: args.pop(), 
d; 
var queryStr = b.queryString, 
ignoreNull = b.ignoreNull, 
cb = b.callback; 
var result = queryStr ? '': {}; 
CC.each(args, 
function(i, v) { 
//如果在fomr中不存在该name元素,就当id来获得 
var obj = v[0].tagName ? v[0] : form ? form[v[0]] : CC.$(v[0]); 
//console.debug('checking field:',v, 'current value:'+obj.value); 
var value = obj.value, 
msg = v[1], 
d = CC.isFunction(v[2]) ? v[3] : v[2]; 
//选项 
if (!d || typeof d != 'object') d = b; 
//是否忽略空 
if (!d.ignoreNull && (value == '' || value == null)) { 
//如果不存在回调函数,就调用alert来显示错误信息 
if (!d.callback) CC.alert(msg, obj, form); 
//如果存在回调,注意传递的三个参数 
//msg:消息,obj:该结点,form:对应的表单,如果存在的话 
else d.callback(msg, obj, form); 
//出错后是否聚集 
if (!d.nofocus) obj.focus(); 
result = false; 
return false; 
} 
//自定义验证方法 
if (CC.isFunction(v[2])) { 
var ret = v[2](value, obj, form); 
var pass = (ret !== false); 
if (CC.isString(ret)) { 
msg = ret; 
pass = false; 
} 
if (!pass) { 
if (!d.callback) CC.alert(msg, obj, form); 
//同上 
else d.callback(msg, obj, form); 
if (!d.nofocus) obj.focus(); 
result = false; 
return false; 
} 
} 
//如果不设置queryString并通过验证,不存在form,就返回一个对象, 
//该对象包含形如{elementName|elementId:value}的数据. 
if (queryStr && !form) { 
result += (result == '') ? 
((typeof obj.name == 'undefined' || obj.name == '') ? obj.id: obj.name) + 
'=' + value: '&' + v[0] + '=' + value; 
} else if (!form) { 
result[v[0]] = value; 
} 
}); 
//如果设置的queryString:true并通过验证,就返回form的提交字符串. 
if (result !== false && form && queryStr) result = CC.formQuery(form); 
return result; 
}

/** 
* 应用对象替换模板内容 
* templ({name:'Rock'},'<html><title>{name}</title></html>'); 
* st:0,1:未找到属性是是否保留 
*/ 
templ: function(obj, str, st) { 
return str.replace(/\{([\w_$]+)\}/g, function(c, $1) { 
var a = obj[$1]; 
if (a === undefined || a === null) { 
if (st === undefined) return ''; 
switch (st) { 
case 0: 
return ''; 
case 1: 
return $1; 
default: 
return c; 
} 
} 
return a; 
}); 
}
Javascript 相关文章推荐
效率高的Javscript字符串替换函数的benchmark
Aug 02 Javascript
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
Jquery异步请求数据实例代码
Dec 28 Javascript
js事件冒泡实例分享(已测试)
Apr 23 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
Dec 03 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
Jul 07 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
Sep 12 Javascript
解决eclipse中没有js代码提示的问题
Oct 10 Javascript
Vue中key的作用示例代码详解
Jun 10 Javascript
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
使用jquery实现轮播图效果
Jan 02 jQuery
再谈ie和firefox下的document.all属性
Oct 21 #Javascript
javascript void(0)的妙用
Oct 21 #Javascript
extjs 学习笔记 四 带分页的grid
Oct 20 #Javascript
Jquery Ajax.ashx 高效分页实现代码
Oct 20 #Javascript
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
Oct 20 #Javascript
Javascript remove 自定义数组删除方法
Oct 20 #Javascript
JavaScript 事件记录使用说明
Oct 20 #Javascript
You might like
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
JsRender for object语法简介
2014/10/31 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
Three.js实现浏览器变动时进行自适应的方法
2017/09/26 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
python访问sqlserver示例
2014/02/10 Python
python中stdout输出不缓存的设置方法
2014/05/29 Python
Python Queue模块详解
2014/11/30 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
python去掉行尾的换行符方法
2017/01/04 Python
python中强大的format函数实例详解
2018/12/05 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
python操作yaml说明
2020/04/08 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
python 通过exifread读取照片信息
2020/12/24 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
2014年幼师工作总结
2014/11/22 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android