util.js
/**
* Created by Administrator on 2016/12/14.
*/
//判断是否为数组
function isArray(arr){
return (arr instanceof Array);
} //判断是否为函数
function isFunction(fn){
return (typeof(fn));
} //深度克隆
function cloneObject(src){
var result,
//判断src的类型
oClass=isClass(src);
if(oClass==="Object"){
result={};
}
else if(oClass==="Array"){
result= [];
}
else{
return src;
}
for(var key in src){
var copy=src[key];
if(isClass(copy)==="Object"){
//递归调用
result[key]=arguments.callee(copy);
}
else if(isClass(copy)==="Array"){
result[key]=arguments.callee(copy);
}
else{
result[key]=copy;
}
}
return result;
}
//返回cla的类 :object 或array 或 基本类型
function isClass(cla){
if(cla===null){
return null;
}
else if(cla===undefined){
return undefined;
}
else{
return Object.prototype.toString.call(cla).slice(8,-1);
}
} //数组去重
function uniqArray(arr){
//去重数组变量temp
var temp=[];
//每个数组值都与之前的数组值作比较,是否重复
for(var i=0,l=arr.length;i<l;i++){
var j=0;
while(arr[i]!=arr[j]){
if(j<i){
j++;
}
}
//不重复,将值push进 去重数组
if(j==i){
temp.push(arr[j]);
}
}
return temp;
} //去除字符串头尾的空格、tab、全角半角空格
function trim(str){
var regex=/^\s*/;
var regex2=/\s*$/;
return str.replace(regex,'').replace(regex2,'');
} // 实现一个遍历数组的方法,针对数组中每一个元素执行fn函数,并将数组索引和元素作为参数传递
function each(arr, fn) {
for(var i= 0,l=arr.length;i<l;i++){
fn(i,arr[i]);
}
}
function fn(idx,item){
item=idx+1;
} // 获取一个对象里面第一层元素的数量,返回一个整数
function getObjectLength(obj) {
var j=0;
for(var i in obj){
j++;
}
return j;
} // 判断是否为邮箱地址
function isEmail(emailStr) {
var re=/\w+@\w+.com/;
return re.test(emailStr);
} // 判断是否为手机号
function isMobilePhone(phone) {
var re=/\d{11}/;
return (re.test(phone));
} //为element增加一个样式名为newClassName的新样式
function addClass(element,newClassName){
var oldClassName=element.className;
element.className=oldClassName+' '+newClassName;
} //删除element一个样式名为oldClassName的旧样式
function removeClass(element,oldClassName){
element.className=element.className.replace(oldClassName,''); return element;}// 判断siblingNode和element是否为同一个父元素下的同一级的元素,返回bool值function isSiblingNode(siblingNode,element){ return (siblingNode.parentNode===element.parentNode);}// 获取element相对于浏览器窗口的位置,返回一个对象{x, y}function getPosition(element) { var top=element.offsetTop, left=element.offsetLeft; while(element.offsetParent){ element=element.offsetParent; top+=element.offsetTop; left+=element.offsetLeft; } return {'x':left,'y':top}}// 实现一个简单的Queryfunction $(selector) { var char=selector.charAt(0), element, idx; switch (char){ //通过id获取dom元素 case '#': idx=selector.indexOf('.'); if(idx==(-1)){ var idName=selector.slice(1); element=document.getElementById(idName); return element; } //通过id和classname获得dom元素 else{ var className=selector.slice(idx+1) ; idName=selector.slice(1,idx-1);//id和classname之间要用一个宫格隔开 element=document.getElementById(idName); element=element.getElementsByTagName('*'); for(var i= 0,l=element.length;i<l;i++){ className=element[i].className.split(' '); for(var m= 0,n=className.length;m<n;m++){ if(className[m]==className){ return element[i]; } } } } break; //通过classname获得dom元素 case '.': selector=selector.slice(1); element=document.getElementsByTagName('*'); for(var i= 0,l=element.length;i<l;i++){ if(element[i].className) { className = element[i].className.split(' '); for (var m = 0, n = className.length; m < n; m++) { if (className[m] == className) { return element[i]; } } } } break; //通过属性名和相对应的属性值获得dom元素 case '[': var attName, value; idx=selector.indexOf('='); element=document.getElementsByTagName('*'); if(idx==(-1)){ attName=selector.slice(1,-1); } else{ attName=selector.slice(1,idx); value=selector.slice(idx+1,-1); } for(var i= 0,l=element.length;i<l;i++){ if(element[i].hasAttribute(attName)){ if(idx!=(-1)){ if(element[i].getAttribute(attName)==value){ return element[i]; } return false; } return element[i]; } } break; //默认通过标签名获得dom元素 default : return document.getElementsByTagName(selector); }}// 使用事件冒泡Bubble给一个element绑定一个针对event事件的响应,响应函数为listenerfunction addEvent(element,event,listener){ if(addEventListener){ element.addEventListener(event,listener,false); } else if(attachEvent){ element.attachEvent(event,listener); } else{ element['on'+event]=listener; }}// 移除element对象对于event事件发生时执行listener的响应function removeEvent(element, event, listener) { if(removeEventListener){ element.removeEventListener(event,listener,false); } else if(detachEvent){ element.detachEvent(event,listener); } else{ element['on'+event]=null; }}// 实现对click事件的绑定function addClickEvent(element, listener) { addEvent(element,'click',listener);}// 实现对于按Enter键时的事件绑定function addEnterEvent(element, listener) { addEvent(element,'keyup', function (e) { e=e||window.event; if(e.keyCode==13){ listener; } });}//用事件冒泡给一个element绑定一个针对eventName事件的响应,响应函数为listenerfunction delegateEvent(element, tag, eventName, listener) { addEvent(element,eventName, function (e) { e=e||window.event; var target= e.srcElement?e.srcElement: e.target; orginX= target.style.left; orginY= target.style.top; if(target.nodeName===tag.toUpperCase()){ listener(target,e,orginX,orginY); } });}// 使用事件捕获Capture给一个element绑定一个针对event事件的响应,响应函数为listener 为focus而生function addEventCaptureFocus(element,event,listener){ if(addEventListener){ element.addEventListener(event,listener,true); } else{ element.addEventListener(event+'in',listener,false); }}// 使用事件捕获Capture给一个element绑定一个针对event事件的响应,响应函数为listener 为blur而生function addEventCaptureBlur(element,event,listener){ if(addEventListener){ element.addEventListener(event,listener,true); } else{ element.addEventListener(event+'out',listener,false); }}//focus、blur、load、unload不支持事件冒泡//使用事件捕获Capture给一个element绑定一个针对eventName事件的响应,响应函数为listenerfunction delegateEvent2(element, tag, eventName, listener) { addEventCaptureFocus(element,eventName,function (e) { e=e||window.event; var target= e.srcElement?e.srcElement: e.target; if(target.nodeName===tag.toUpperCase()){ console.log(target.value); listener(); } });}//使用事件捕获Capture给一个element绑定一个针对eventName事件的响应,响应函数为listenerfunction delegateEvent3(element, tag, eventName, listener) { addEventCaptureBlur(element,eventName,function (e) { e=e||window.event; var target= e.srcElement?e.srcElement: e.target; if(target.nodeName===tag.toUpperCase()){ listener(); } });}//将addEvent,removeEvent,addClickEvent,addEnterEvent变成$对象的一些方法$.on=addEvent;$.un=removeEvent;$.click=addClickEvent;$.enter=addEnterEvent;$.delegat=delegateEvent;// 判断是否为IE浏览器,返回-1或者版本号function isIE() { return document.documentMode||false;}// 设置cookiefunction setCookie(cookieName, cookieValue, expiredays) { var cookieText=encodeURIComponent(cookieName)+'='+encodeURIComponent(cookieValue); var exDate=new Date(); exDate.setDate(exDate.getDate()+expiredays); cookieText+=';expires='+exDate.toUTCString(); document.cookie=cookieText;}// 获取cookie值function getCookie(cookieName) { cookieName=encodeURIComponent(cookieName); var start=document.cookie.indexOf(cookieName), cookieValue=null; if(start!=-1){ var end=document.cookie.indexOf(';'); if(end==-1){ end=document.cookie.length; } cookieValue=encodeURIComponent(document.cookie.substring(start+1+cookieName.length,end)); } return cookieValue;}//封装一个Ajax方法function ajax(url, options) { // your implementvar xhr=createXHR(); var type, data, successFn, failFn; if(typeof (options)=='object'){ type=options.type.toUpperCase(); data=options.data||null; successFn=options.successFn||'undefined'; failFn=options.onfail||'undefined'; } if(typeof (data)=='object'){ var str=''; for(var key in data){ str+=key+'='+data[key]+'&'; } data=str.replace(/&$/,''); str=null; } xhr.onreadystatechange= function () { if(xhr.readyState==4){ if(xhr.status>=200&&xhr.status<300||xhr.status==304){ successFn(xhr.responseText); } else{ if(failFn){ failFn(xhr.status); } else{ console.error('Unsuccessful:\t'+xhr.status); } } } }; switch (type){ case 'GET': xhr.open('GET',url+'?'+data,true); xhr.send(); break; case 'POST': xhr.open('POST',url,true); break; }}function createXHR(){ var xhr; if(window.XMLHttpRequest){ xhr=new XMLHttpRequest(); } else{ xhr=new ActiveXObject('Microsoft.XMLHTTP'); } return xhr;}//ajax('test.php',{type:'GET',successFn:function(){console.log("i am success");}});

ife2015-task2-javascript-util.js的更多相关文章

  1. javascript util.js

    //根据Id获得页面元素 function $(para) {    return document.getElementById(para);} //创建一个新的元素function createE ...

  2. vue项目工具文件utils.js javascript常用工具类,javascript常用工具类,util.js

    vue项目工具文件utils.js :https://blog.csdn.net/Ajaxguan/article/details/79924249 javascript常用工具类,util.js : ...

  3. util.js

    轻量基础库.方法库 用时可直接拷贝 拆卸式使用 适用于mobile端简单页面 适用于PC简单页面 基于node.php等多种构建方法 (function(M){ /** * 初始化Ajax请求 * @ ...

  4. Javascript : require.js 的使用(例子)

    demo 结构:     config.js require.config({ baseUrl: 'js/lib', paths: { 'jquery' : 'jquery-1.11.1.min', ...

  5. [TypeScript] 建置输出单一JavaScript档案(.js)与Declaration档案(.d.ts)

    [TypeScript] 建置输出单一JavaScript档案(.js)与Declaration档案(.d.ts) 问题情景 开发人员使用Visual Studio来开发TypeScript,可以很方 ...

  6. JavaScript之JS实现动画效果

    在前面的随笔中介绍了如何用DOM技术修改文档的央样式信息,用JavaScript添加样式信息可以节约我们的时间和精力,但总的来说,CSS仍是完成这类任务的最佳工具.但是有一个应用领域是目前的CSS无能 ...

  7. 阅读:重新介绍 JavaScript(JS教程)

    这篇文章是记录自己阅读重新介绍 JavaScript(JS 教程)的记录和个人体会 在线调试代码工具:https://codepen.io/pen 引言 分歧根源:名字Javascript和Java有 ...

  8. JavaScript(JS)简介

    历史背景介绍 (Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript ...

  9. 【javascript】js 检验密码强度

    最近一直在做通行证项目,里面的注册模块中输入密码需要显示密码强度(低中高).今天就把做的效果给大家分享下,代码没有网上搜索的那么复杂,能够满足一般的需求. html 代码如下: <!DOCTYP ...

  10. 帮助自定义选择框样式的Javascript - DropKick.js

    来源:GBin1.com 在线演示  在线下载 当你想要设计一个页面样式时,没有什么比表单更让人头疼了.而当你设计一个表单的样式时,最让你头疼的就应该非下拉框<select>莫属了. 我们 ...

随机推荐

  1. 通过设计表快速了解sql语句中字段的含义

    打开Navicat-------> 选择数据库 ------->右键设计表------>查看下方注释

  2. 脚本,替换ipa里面的资源,并重新打包

    今天逯同事说,可以把狂挂传奇打包的项目写成一个脚本,这样就不用担心证书有时不能用的问题了. 然后,像我这么好学的学生,当然要去执行了.(其实,以前他给的建议我都只是听听而已,这次是因为想学点东西了,所 ...

  3. BZOJ - 2728 与非

    题意: 给定N个数,一个数k和一个范围[L,R].每个数可以使用任意次,k表示与非不超过k位.求出范围内有多少个数可以由他们的与非和表示. 题解: m个数进行NAND,最终的数二进制下某一位如果为1, ...

  4. 真·APIO2018滚粗记

    有人说只有大佬才会说滚粗啊爆零啊…… 然而我真滚粗真爆零啊…… D1: 听课,然后夏眠. 咦折纸……哦好吧太神仙了. 咦AI……好妙啊好妙啊. 咦二分……哇还有wqs二分这种神奇操作,学学学. (我是 ...

  5. [bzoj] 3224 Tyvj 1728 普通平衡树 || 平衡树板子题

    #include<cstdio> #define N 100010 #define which(x) (ls[f[(x)]]==(x)) using namespace std; int ...

  6. 公共文件js加载

    头部:例如 <header id="header" class="clearfix"> <a class="col-xs-9&quo ...

  7. DLP与上网行为管理的差别总结

    参考网康和深信服的上网行为管理手册,总结了一下DLP与上网行为管理的差别: DLP与上网行为管理在功能和使用目的上有很大不同.主要体现在: 上网行为管理主要是对用户访问目标URL过滤,应用端口限制,上 ...

  8. 通过VS2010性能分析来查找代码中那些地方最损耗资源

    在编写完成一个程序后,大家都比较关心程序的性能如何,想把程序优化得更好.很多时候凭个人直觉来优化程序是件非常不靠普的事情,即使你是一个优秀的开人员也很难准确地判断程序中那些出现问题.VS2010提供了 ...

  9. ci的数据库地址

    CI在linux服务器上运行的时候,数据库配置主机名的时候必须是127.0.0.1,而不是localhost.并且phpmyadmin也有这样的要求

  10. bzoj 4455 [Zjoi2016]小星星 树形dp&容斥

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 643  Solved: 391[Submit][Status] ...