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 相关文章推荐
input 高级限制级用法
Mar 26 Javascript
javascript面向对象包装类Class封装类库剖析
Jan 24 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
Sep 22 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
Nov 04 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
Jul 31 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
Aug 08 Javascript
JS异步文件分片断点上传的实现思路
Dec 25 Javascript
Ionic2调用本地SQlite实例
Apr 22 Javascript
vue父组件点击触发子组件事件的实例讲解
Feb 08 Javascript
vue表单数据交互提交演示教程
Nov 13 Javascript
JavaScript定时器常见用法实例分析
Nov 15 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
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
python中as用法实例分析
2015/04/30 Python
python实现excel读写数据
2021/03/02 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
2018/06/14 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
使用python+poco+夜神模拟器进行自动化测试实例
2020/04/23 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
美国鲜花递送:UrbanStems
2021/01/04 全球购物
生物制药毕业生自荐信
2013/10/16 职场文书
营业经理岗位职责
2013/11/10 职场文书
优秀公益广告词大全
2014/03/19 职场文书
淘宝客服工作职责
2014/07/11 职场文书
单位委托书格式范本
2014/09/29 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
2014全年工作总结
2014/11/27 职场文书
关于Vue中的options选项
2022/03/22 Vue.js
MySQL创建管理RANGE分区
2022/04/13 MySQL