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 相关文章推荐
JS的递增/递减运算符和带操作的赋值运算符的等价式
Dec 08 Javascript
JS解密入门之凭直觉解
Jun 25 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
JavaScript实现Iterator模式实例分析
Jun 09 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
JavaScript Array对象详解
Mar 01 Javascript
js拼接html字符串的注意事项
Oct 13 Javascript
Javascript的动态增加类的实现方法
Oct 20 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
Websocket 向指定用户发消息的方法
Jan 09 Javascript
js滚轮事件 js自定义滚动条的实现
Jan 18 Javascript
一起深入理解js中的事件对象
Feb 06 Javascript
再谈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
备份mysql数据库的php代码(一个表一个文件)
2010/05/28 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
php实现等比例压缩图片
2018/07/26 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
2017/03/04 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
python3爬取数据至mysql的方法
2018/06/26 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
文秘专业大学生求职信
2013/11/10 职场文书
社会公德演讲稿
2014/05/20 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android