JavaScript 常用函数库详解
JavaScript 常用函数库详解
发布时间:2016-12-30 来源:查字典编辑
摘要:为此,收集了自己平时常用到一些JavaScript函数,它们在其它的JS库也常见,现在整理并附上注释,方便查阅,希望对大家有所帮助。注:假设...

为此,收集了自己平时常用到一些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教程学习
热门Javascript教程学习
编程开发子分类