base.js
function $_id(id){return document.getElementById(id)};//$只定义为通过ID返回元素的功能
//-----------------------dom 自定义方法类---------------------------
function dom(obj){//实现自定义类的一个实例,obj为元素的ID或元素本身
return new customDom(obj);
}
function customDom(obj){//实现元素自定义方法的类,obj为元素的ID或元素本身
if(typeof(obj) == "string"){
this.obj = document.getElementById(obj);
}
else if(typeof(obj) == "object"){this.obj = obj;}
else this.obj = null;
}
//自定义类方法的实现
customDom.prototype={
//得到元素
getElem:function(){return this.obj;},
//得到元素真实坐标,返回一个数组[x,y]
getPosition:function(){
var position = [0,0];
var obj = this.obj;
while(obj.offsetParent){
position[0] += obj.offsetLeft;
position[1] += obj.offsetTop;
obj = obj.offsetParent;
}
position[0] + document.body.offsetLeft;
position[1] + document.body.offsetTop;
return position;
},
//得到元素属性
getStyle:function(name){
var elem = this.obj;
//如果该属性存在于style[]中
if (elem.style[name]){return elem.style[name];}
//否则,尝试IE的方式
else if (elem.currentStyle){return elem.currentStyle[name];}
//或者W3C的方法
else if (document.defaultView && document.defaultView.getComputedStyle){
//格式化mame名称
name = name.replace(/([A-Z])/g,"-$1");
name = name.toLowerCase();
//获取style对象并取得属性的值(如果存在的话)
var s = document.defaultView.getComputedStyle(elem,"");
return s && s.getPropertyValue(name);
//否则,就是在使用其它的浏览器
} else{return null;}
},
//得到子节点数组(解决FF等子节点包括空白节点和文本节点的问题)
getChildren:function(){
var AchildNodes = [];
for(var i = 0;i < this.obj.childNodes.length;i++){
if(this.obj.childNodes[i].nodeType == 1){
AchildNodes.push(this.obj.childNodes[i]);
}
}
return AchildNodes;
},
//得到下一个兄弟节点
getNextSibling:function(){
var endBrother = this.obj.nextSibling;
while(endBrother.nodeType != 1 ){
endBrother = endBrother.nextSibling;
}
return endBrother;
},
//得到上一个兄弟节点
getPreSibling:function(){
endBrother = this.obj.previousSibling;
while(endBrother.nodeType != 1){
endBrother = endBrother.previousSibling;
}
return endBrother;
},
//通过getElementsByTagName方式得到的元素并转换为数组
getByTagName:function(name){
var tagNames = this.obj.getElementsByTagName(name);
var arr = [];
for(var i = 0;i < tagNames.length;i++){
arr.push(tagNames[i]);
}
return arr;
},
//在节点后插入新的兄弟节点
insertAfter:function(newNode){
if(this.obj.nextSibling){this.obj.parentNode.insertBefore(newNode, this.obj.nextSibling);}
else{this.obj.parentNode.appendChild(newNode);}
},
//非IE的innerText用textContent;
text:function(str){
this.obj.innerText ? this.obj.innerText = str:this.obj.textContent = str;
},
//把用getElementsByTagName等方式得到的元素转换为数组
toArray:function(){
var arr=[];
for(var i=0;i<this.obj.length;i++){
arr.push(this.obj[i]);
}
return arr;
}
}
//------------------------------Array 扩展类------------------------------
//copy数组
Array.prototype.copy = function(){return this.slice();}
//返回数组中指定字符串的索引
Array.prototype.indexof = function(str){
for(var q = 0;q < this.length;q++){
if(this[q] == str){return q;}
}
return -1;
}
/*
var a=[1,4,5,7,84,45,35]
alert(a.indexof(5)) //opt 5
*/
//数组随机排序
Array.prototype.aSort = function(method){
function Sort(a,b){
if(method == 0 || method == 1){
if(a > b){if(method == 0){return 1}else{ return -1}}
if(a < b){if(method == 0){return -1}else{ return 1}}
else{return 0}
}
else if(method == 2){return Math.random() > .5 ? -1 : 1;}//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
}
this.sort(Sort);
}
/*
var a=[1,4,5,7,84,45,35]
a.aSort(2)
alert(a.toString())
*/
//在数组任意索引处删除一项
Array.prototype.delIndex = function(index){this.splice(index,1)}
//在数组任意索引处删除多项
Array.prototype.del = function(){
var opts = this.sort.call(arguments,Function('a,b','return a > b?-1:1;'));
for (var i = 0;i < opts.length;i++ ){this.splice(opts[i],1);}
return this;
}
/*
var a=['甲','乙','丙','丁'];
alert(a.del(3,1));
*/
//在数组任意索引后增加一项或多项
Array.prototype.addIndex = function(index,arr){this.splice(index + 1,0,arr)}
//返回数组中最大项
Array.prototype.max = function(){
return Math.max.apply({},this);
}
//返回数组中最小项
Array.prototype.min = function(){
return Math.min.apply({},this);
}
//------------------------------String 扩展类------------------------------
//得到有汉字字符串的长度
String.prototype.chLength = function(){
var strLen = 0;
for(i = 0;i < this.length;i++){
if(this.charCodeAt(i) > 255){strLen += 2;}
else{strLen++;}
}
return strLen;
}
//去除敏感字符
String.prototype.trimBadWords = function(str){
var reg = new RegExp(str,"gi");
return this.replace(reg,function(str_bad){return str_bad.replace(/./g,"*")});
}
//去除字符串首尾空格
String.prototype.trimSpaces = function(){
var reg = /^\s*(.*?)\s*$/gim;
return this.replace(reg,"$1");
}
//转化<>标签为实体字符
String.prototype.trimTab = function(){
var reg = /<|>/g;
return this.replace(reg,function(s){if(s == "<"){return "<";}else{return ">";}})
}
//去除任意HTML标签
String.prototype.trimHtml = function(tag){//不写标签名代表所有标签
tag ? reg = new RegExp("<\/?"+tag+"(?:(.|\s)*?)>","gi"):reg = /<(?:.|\s)*?>/gi;
return this.replace(reg,"");
}
//-----------------------event---------------------------
var ev={
//添加事件监听
addEvent:function(obj,evt,fun){
if(obj.addEventListener){//for dom
obj.addEventListener(evt,fun,false)
}
else if(obj.attachEvent){//for ie
obj.attachEvent("on"+evt,fun)
//obj.attachEvent("on"+evt,function(){fun.call(obj)});//解决IE attachEvent this指向window的问题
}
else{obj["on"+evt] = fun}//for other
},
//删除事件监听
removeEvent:function(obj,evt,fun){
if(obj.removeEventListener){//for dom
obj.removeEventListener(evt,fun,false)
}
else if(obj.detachEvent){//for ie
obj.detachEvent("on"+evt,fun)
}
else{obj["on"+evt] = null;
} //for other
},
//捕获事件
getEvent:function(){
if(window.event){return window.event}
else{return ev.getEvent.caller.arguments[0];}
},
formatEvent:function(evt){
evt.eTarget = evt.target ? evt.target:evt.srcElement;//事件目标对象
evt.eX = evt.pagex ? evt.pagex:evt.clientX + document.body.scrollLeft;//页面鼠标X坐标
evt.eY = evt.pagey ? evt.pagex:evt.clientY + document.body.scrollTop;//页面鼠标Y坐标
evt.eStopDefault = function(){this.preventDefault ? this.preventDefault():this.returnValue = false;}//取消默认动作
evt.eStopBubble = function(){this.stopPropagation ? this.stopPropagation():this.cancelBubble = true;}//取消冒泡
}
}
//----------------------------------cookie-----------------------------------
var cookie = {
//设置cookie
setCookie:function(sName,sValue,oExpires,sPath,sDomain,bSecure) {
var sCookie=sName + "=" + encodeURIComponent(sValue);
if(oExpires){sCookie += "; expires=" + oExpires.toUTCString();}
if(sPath){sCookie += "; path="+sPath;}
if(sDomain){sCookie += "; domain="+sDomain;}
if(bSecure){sCookie += "; scure";}
document.cookie=sCookie;
},
//读取cookie
getCookie:function(sName){
var sRE="(?:; )?" + sName + "=([^;]*);?";
var oRE=new RegExp(sRE);
if(oRE.test(document.cookie)){
return decodeURIComponent(RegExp["$1"]);
}
else{return null;}
},
//删除cookie
delCookie:function(sName,sPath,sDomain){
setCookie(sName,"",new Date(0),sPath,sDomain);
}
}
//--------------------ajax类---------------------
var XMLHttp = {
_objPool: [],
_getInstance: function (){
for (var i = 0; i < this._objPool.length; i ++){
if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4){
return this._objPool[i];
}
}
// IE5中不支持push方法
this._objPool[this._objPool.length] = this._createObj();
return this._objPool[this._objPool.length - 1];
},
_createObj: function (){
if (window.XMLHttpRequest){ var objXMLHttp = new XMLHttpRequest();}
else{
var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for(var n = 0; n < MSXML.length; n ++){
try {
var objXMLHttp = new ActiveXObject(MSXML[n]);
break;
}
catch(e){}
}
}
// mozilla某些版本没有readyState属性
if (objXMLHttp.readyState == null){
objXMLHttp.readyState = 0;
objXMLHttp.addEventListener("load", function (){
objXMLHttp.readyState = 4;
if (typeof objXMLHttp.onreadystatechange == "function"){
objXMLHttp.onreadystatechange();}
}, false);
}
return objXMLHttp;
},
// 发送请求(方法[post,get], 地址, 数据, 回调函数, 回调函数参数-多个用数组形式)
sendReq: function (method, url, data, callback,arg){
var objXMLHttp = this._getInstance();
with(objXMLHttp){
try{
// 加随机数防止缓存
if (url.indexOf("?") > 0){
url += "&randnum=" + Math.random();
}
else{url += "?randnum=" + Math.random();}
open(method, url, true);
// 设定请求编码方式
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
send(data);
onreadystatechange = function (){
if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304)){
callback(objXMLHttp,arg);
}
}
}
catch(e){alert(e);}
}
}
};
//js浮点数精确计算函数(加,减,乘,除)//浮点数加法运算
function FloatAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2));
return (arg1*m+arg2*m)/m;
} ;
//浮点数减法运算
function FloatSub(arg1,arg2){
var r1,r2,m,n;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2));
//动态控制精度长度
n=(r1>=r2)?r1:r2;
return ((arg1*m-arg2*m)/m).toFixed(n);
} ;
//浮点数乘法运算
function FloatMul(arg1,arg2) {
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
} ;
//浮点数除法运算
function FloatDiv(arg1,arg2){
var t1=0,t2=0,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".","")) ;
r2=Number(arg2.toString().replace(".",""));
return (r1/r2)*pow(10,t2-t1);
}
} ;
base.js的更多相关文章
- 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,
封装常用的js(Base.js)——[01]理解库,获取节点,连缀, youjobit07 2014-10-10 15:32:59 前言: 现如今有太多优秀的开源javascript库, ...
- 【javascript】base.js
作为一个好的脚手架使用 /* Base.js, version 1.1a Copyright 2006-2010, Dean Edwards License: http://www.opensourc ...
- sea.js 入门
上个月学了 require.js 现在顺便来学学 sea.js. 对比下这两种的区别,看自己喜欢哪个,就在接下来的项目中去使用它吧. seajs中的所有 JavaScript 模块都遵循 CMD 模块 ...
- Razor.js,基于JavaScript的Razor实现
哈罗大家好,之前造了JS模板轮子Otmpl,虽然勉强算不错,但是和MVC Razor的简洁优雅相比,简直是惨不忍睹.经过几天的研究,终于在参考国外一些牛人的代码后,展现出第一版,欢迎各位园友拍砖讨论. ...
- 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的
多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...
- jquery.validate.min.js 用法方法示例
页面html 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- 《Node.js开发实战详解》学习笔记
<Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...
- 一句命令快速合并 JS、CSS
在项目开发环境下,我们会把 JS 代码尽可能模块化,方便管理和修改,这就避免不了会出现一个项目自身 JS 文件数量达到 10 个或者更多. 而项目上线后,会要求将所有 JS 文件合并为 1 个或者几个 ...
- ASP.Net MVC4中封装CSS和js冗余代码(不让其大篇的显示在前台上)
(1)封装CSS和JS代码,使用调用的方式在前台进行调用.是开发看起来简洁和易于管理,可达到重用. 由于asp.netMVC4 框架 ,在封装js和CSS的时候,有如下规范: using Syst ...
随机推荐
- 使用bower管理前端依赖
bower,类似于npm.maven等后端管理构建工具一样,bower可以用来管理前端浏览器依赖,关于bower详细介绍参考官网:https://bower.io/ bower init命令:初始化项 ...
- 安装Vmware workstation虚拟机(含软件和注册码)
1:虚拟机的安装步骤,包含软件包和注册码.本博客所使用的虚拟机版本是vmware-workstation_11.1.0版本,注意不是最新版本, 软件包:http://pan.baidu.com/s/1 ...
- cached过高导致内存溢出 java head space
最近公司线上遇到老是内存溢出检查后发现cached过高 命令:free -m 命令:sync //将缓存写入硬盘 cat /etc/redhat-release 这个是查看系统版本的命令c ...
- Maven学习总结(一)——Maven入门——转载
一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1. ...
- DataWindow.Net 2.5 配置
在用过的所有的开发工具中,感觉最简单好用的就数PB了,他的DataWindow最方便,拖拖拽拽就把报表做好了,可惜现在很少人有用了.现在C/S系统一般用C#来做,但是做报表的时候总感觉没有DataWi ...
- JS深入了解闭包
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作 ...
- Chrome Apps將是Google送給微軟的特洛伊木馬?
今天,Google 發表了 Chrome Apps,不同於之前 web app,此舉是要把 Chrome 瀏覽器升級為真正的 app 平台,將 Chrome OS 發展成一個成熟的作業系統,可以視為 ...
- 多看Kindle的“导出失败,请检查网络或账号”错误的解决
一直都用得好好的,今天突然不行了,报错“导出失败,请检查网络或账号”. 网上搜索,试了一下这个方法: 我目前的解决办法是:先同步至小米账户(需要联网,并在Kindle系统设置 -> 阅读 -&g ...
- Sencha Toucha 2 —1.环境安装配置、在线打包、离线打包
环境安装配置 1. 下载 1.1 Sencha Touch 下载 http://cdn.sencha.com/touch/sencha-touch-2.2.1-gpl.zip 1 ...
- QT Creater + vs2010 发布程序
这几天帮同学写了个简单的gui应用,用的qt5.0.2_msvc2010.写的程序需要在一台没有装过vs和qt的机子上运行. 在release下编译运行通过后,把相应的依赖dll加入到exe相同的文件 ...