兼容获取非行间样式
function getStyle(obj,name){
return obj.currentStyle?obj.currentStyle[name]:getComputedStyle(obj,false)[name];
}
生成随机数(n下限,m上限)
function rnd(n,m){
return parseInt(Math.random()*(m-n)+n)
}
在数组中查重
function findInArr(num,arr){
for(var i=0;i<arr.length;i++){
if(arr[i] == num){
return true;
}
};
return false;
}
数组去重
4种算法:
1.Array.prototype.unique1 = function(){
var n = []; //一个新的临时数组
for(var i = 0; i < this.length; i++) //遍历当前数组
{
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if (n.indexOf(this[i]) == -1) n.push(this[i]);
}
return n;
}
2.Array.prototype.unique2 = function(){
var n = {},r=[]; //n为hash表,r为临时数组
for(var i = 0; i < this.length; i++) //遍历当前数组
{
if (!n[this[i]]) //如果hash表中没有当前项
{
n[this[i]] = true; //存入hash表
r.push(this[i]); //把当前数组的当前项push到临时数组里面
}
}
return r;
}
3.Array.prototype.unique3 = function(){
var n = [this[0]]; //结果数组
for(var i = 1; i < this.length; i++) //从第二项开始遍历
{
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if (this.indexOf(this[i]) == i) n.push(this[i]);
}
return n;
}
4.Array.prototype.unique4 = function()
{
this.sort();
var re=[this[0]];
for(var i = 1; i < this.length; i++)
{
if( this[i] !== re[re.length-1])
{
re.push(this[i]);
}
}
return re;
}
去空格函数
//供使用者调用
function trim(s){
return trimRight(trimLeft(s));
}
//去掉左边的空白
function trimLeft(s){
if(s == null) {
return "";
}
var whitespace = new String(" \t\n\r");
var str = new String(s);
if (whitespace.indexOf(str.charAt(0)) != -1) {
var j=0, i = str.length;
while (j < i && whitespace.indexOf(str.charAt(j)) != -1){
j++;
}
str = str.substring(j, i);
}
return str;
}
//去掉右边的空白
function trimRight(s){
if(s == null) return "";
var whitespace = new String(" \t\n\r");
var str = new String(s);
if (whitespace.indexOf(str.charAt(str.length-1)) != -1){
var i = str.length - 1;
while (i >= 0 && whitespace.indexOf(str.charAt(i)) != -1){
i--;
}
str = str.substring(0, i+1);
}
return str;
}
正则实现:
<script type="text/javascript">
//去左空格;
function ltrim(s){
return s.replace(/(^\s*)/, "");
}
//去右空格;
function rtrim(s){
return s.replace(/(\s*$)/, "");
}
//去左右空格;
function trim(s){
//s.replace(/(^\s*)|(\s*$)/, "");
return rtrim(ltrim(s));
}
如果是去掉半角和全角空格就把 \s 替换成 [' '|' '] 就变成
//去左空格;
function ltrim(s){
return s.replace(/(^[' '|' ']*)/, '');
}
//去右空格;
function rtrim(s){
return s.replace(/([' '|' ']*$)/, '');
function show(a){
var f = trim(a)
alert(f);
alert(f.length);
}
</script>
<input type="text" id="admin" onblur="show(this.value)"/>
补零函数
function toDou(n){
return n<10? '0'+n : ''+n;
}
某个对象添加Class
function addClass(obj,ClassName){
if(obj.className == ''){
obj.className = ClassName;
} else{
var arrClassName = obj.className.split(' ');
var _index = arrIndexof(arrClassName,ClassName);
if(_index == -1){
obj.className += ' '+ ClassName;
}
}
}
某个对象移除Class
function removeClass(obj,ClassName){
if(obj.className != ''){
var arrClassName = obj.className.split(' ');
var _index = arrIndexof(arrClassName,ClassName);
if( _index != -1 ){
arrClassName.splice(_index,1);
obj.className = arrClassName.join(' ');
}
}
}
在当前class数组中查找是否存在
function arrIndexof(arr,v){
for(var i=0;i<arr.length;i++){
if(arr[i] == v){
return i;
}
}
return -1;
}
通过className获取元素(parent父级,ClassName要获取的class名称)
function getClassName(parent,ClassName){
if (document.getElementsByClassName){
return parent.getElementsByClassName(ClassName);
} else {
var aEls = parent.getElementsByTagName('*');
var arr = [];
for (var i=0;i<aEls.length;i++){
var aClassName = aEls[i].className.split(' ');
for(var k=0;k<aClassName.length;k++){
if (aClassName[k] == ClassName){
arr.push(aEls[i]);
}
}
}
return arr;
}
}
获取一个字符串字节长度(str为要获取的字符串,type为'gbk''gb2312')
function getByLen(str,type){
var len = 0;
for (var i=0;i<str.length;i++){
if(str.charAt(i)>='\u4e00' && str.charAt(i)<='\u9fa5'){
if(type == 'gbk' || type == 'gb2312'){
len+=2;
} else {
len+=3;
}
} else {
len++;
}
}
return len;
}
获取元素到页面的绝对距离(无论有没有,有多少定位父级)
function getPos(obj){
var x = 0;
var y = 0;
while (obj){
x += obj.offsetLeft;
y += obj.offsetTop;
obj = obj.offsetParent; //图片懒加载最高定位到父级为body
}
return {left:x,top:y};
}
事件绑定
function addEvent(obj,oEvn,fn){
if (obj.addEventListener) {
obj.addEventListener(oEvn,fn, false);
} else{
obj.attachEvent('on' + oEvn,function(){
fn.call(obj);
});
}
}
解除事件绑定(无法解除匿名函数)
function removeEvent(obj,oEvn,fn){
if(obj.removeEventListener){
obj.removeEventListener(oEvn, fn, false);
}else{
obj.detachEvent('on' + oEvn,function(){
fn.call(obj);
});
}
}
鼠标滚轮事件 滚轮事件不支持chrome,兼容事件
处理兼容:
if(window.navigator.userAgent.indexOf('Firefox')!=-1){
oBox.addEventListener('DOMMouseScroll',function(){
alert('火狐滚轮事件');
},false);
}else{
oBox.onmousewheel=function(){
alert('其他浏览器滚轮事件');
};
}
function addWheel(obj,fn){
if (window.navigator.userAgent.toLowerCase().indexOf('firefox') != -1){
obj.addEventListener('DOMMouseScroll',wheel,false);
} else {
addEvent(obj,'mousewheel',wheel);
}
function wheel(ev){
var oEvent = ev || event;
var bDown = true;//假设鼠标向下滚动为true
if(oEvent.wheelDelta){
if(oEvent.wheelDelta > 0){//Chrome、IE系列
bDown = false;//向下
} else {
bDown = true;//向上
}
} else {
if(oEvent.detail < 0 ){//FF
bDown = false;//向上
} else {
bDown = true;//向下
}
}
fn && fn(bDown);
oEvent.preventDefault && oEvent.preventDefault();
return false;
}
}
window.onload = function () {
var oBox = document.getElementById('box');
addWheel(oBox,function(bDown){
if (bDown) {
alert(1);
}else {
alert(2);
}
})
}
//domReady(替代window.onload) 如何兼容浏览器
function domReady(fn){
if(document.addEventListener){
document.addEventListener('DOMContentLoaded',function(){//高版本浏览器
fn&&fn();
},false);
}else {
document.onreadystatechange = function(){
if (document.readyState == 'complete'){ //低级浏览器中运行 (传输的不仅是数据而json传输数据)
fn&&fn();
}
}
}
}
网友评论