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 "&lt;";}else{return "&gt;";}})
} //去除任意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的更多相关文章

  1. 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,

    封装常用的js(Base.js)——[01]理解库,获取节点,连缀,  youjobit07 2014-10-10 15:32:59 前言:       现如今有太多优秀的开源javascript库, ...

  2. 【javascript】base.js

    作为一个好的脚手架使用 /* Base.js, version 1.1a Copyright 2006-2010, Dean Edwards License: http://www.opensourc ...

  3. sea.js 入门

    上个月学了 require.js 现在顺便来学学 sea.js. 对比下这两种的区别,看自己喜欢哪个,就在接下来的项目中去使用它吧. seajs中的所有 JavaScript 模块都遵循 CMD 模块 ...

  4. Razor.js,基于JavaScript的Razor实现

    哈罗大家好,之前造了JS模板轮子Otmpl,虽然勉强算不错,但是和MVC Razor的简洁优雅相比,简直是惨不忍睹.经过几天的研究,终于在参考国外一些牛人的代码后,展现出第一版,欢迎各位园友拍砖讨论. ...

  5. 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的

    多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...

  6. jquery.validate.min.js 用法方法示例

    页面html 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  7. 《Node.js开发实战详解》学习笔记

    <Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...

  8. 一句命令快速合并 JS、CSS

    在项目开发环境下,我们会把 JS 代码尽可能模块化,方便管理和修改,这就避免不了会出现一个项目自身 JS 文件数量达到 10 个或者更多. 而项目上线后,会要求将所有 JS 文件合并为 1 个或者几个 ...

  9. ASP.Net MVC4中封装CSS和js冗余代码(不让其大篇的显示在前台上)

    (1)封装CSS和JS代码,使用调用的方式在前台进行调用.是开发看起来简洁和易于管理,可达到重用.   由于asp.netMVC4 框架 ,在封装js和CSS的时候,有如下规范: using Syst ...

随机推荐

  1. paip.判断文件是否存在uapi python php java c#

    paip.判断文件是否存在uapi python php java c# ==========uapi file_exists exists() 面向对象风格:  File.Exists 作者: 老哇 ...

  2. FIR.im Weekly - 上周微博热转资源精选

    LeakCanary: 让内存泄露无所遁形 Square 开源的 LeakCanary,国内开发者 @廖祜秋liaohuqiu 翻译了对应的官方博客,撰写了中文使用说明文档,同时还写了一个小 Demo ...

  3. Java thread jargon

    In Java thread topic, the task to be executed and the thread to drive the task are two concepts shou ...

  4. mac上安装homebrew

    1:关于homebrew下载地址 homebrew下载地址网上版本很多:我用了几个都是显示 404 bad request 如图:均无法现在 有一个网址会给出最新的 安装地址: the URL is: ...

  5. JVM中的Stack和Frame

    JVM执行Java程序时需要装载各种数据,比如类型信息(Class).类型实例(Instance).常量数据(Constant).本地变量等.不同的数据存放在不同的内存区中,这些数据内存区称作“运行时 ...

  6. 提高D3js力导向图加载速度(转)

    过去一段时间曾两次使用了 D3 力导向图来描绘族群关系. http://bl.ocks.org/mbostock/1062288 第一次用的时候不求甚解,交差了事.当时点也不多,很顺利完成了任务.这一 ...

  7. Jmeter调试工具---HTTP Mirror Server

    之前我介绍过Jmeter的一种调试工具Debug Sampler,它可以输出Jmeter的变量.属性甚至是系统属性而不用发送真实的请求到服务器.既然这样,那么HTTP Mirror Server又是做 ...

  8. 查看mysql版本的四种方法

    1:在终端下:mysql -V. 以下是代码片段: [shengting@login ~]$ mysql -V mysql Ver 14.7 Distrib 4.1.10a, for redhat-l ...

  9. [转]mongodb与mysql相比的优缺点

    原文地址:http://blog.sina.com.cn/s/blog_966e430001019s8v.html 与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问 ...

  10. 袭击Mercurial SCM(HG)

    这个叫水银的源代码管理工具尽管默默无闻,但还是得到了非常多团队的使用. 为了迎合某些团队的须要,我们也要用它来管理我们的代码. 今天的任务是先袭击学习.磨刀不误砍柴工. 对工具的掌握越快.工作的效率就 ...