Javascript小问题

1、原生对象克隆

var clone = function(obj) {
  var o;
  if (typeof obj == "object") {
    if (obj === null) {
      o = null;
    } else {
      if (obj instanceof Array) {
        o = [];
        for (var i = 0,
        len = obj.length; i < len; i++) {
          o.push(clone(obj[i]));
        }
      } else {
        o = {};
        for (var j in obj) {
          o[j] = clone(obj[j]);
        }
      }
    }
  } else {
    o = obj;
  }
  return o;
};

2、日期转字符串

Date.prototype.format = function(format) {
var date = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3),
"S+": this.getMilliseconds()
};
if (/(y+)/i.test(format)) {
format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in date) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1
? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
}
}
return format;
};

console.log((new Date()).format("yyyy-MM-dd"));

3、数组循环

arr = [4,5,6].map(function(item, idx, origin){return item+1;});
arr = [4,5,6].forEach(function(item, idx, origin){console.log(item+1);});
arr = [4,5,6].filter(function(item, idx, origin){return item>4;});

  

4、数组相减

var arrSub = function(mainArr, subArr, eqFn) {
	var arr1 = mainArr.concat([]);
	var a, b;
	for (var i = arr1.length - 1; i >= 0; i--) {
		a = arr1[i];
		for (var j = subArr.length - 1; j >= 0; j--) {
			b = subArr[j];
			if (eqFn === undefined) {
				if (a == b) {
					arr1.splice(i, 1);
					break;
				}
			} else if (eqFn(a, b)) {
				arr1.splice(i, 1);
				break;
			}
		}
	}
	return arr1;
};
arrSub([ 1, 2 ], [ 1 ]);

5、数组去重

var uniq = function(arr){ 
	var newArr = [];
	for(var i = 0; i < arr.length; i++){  
		if(newArr.indexOf(arr[i]) == -1)newArr.push(arr[i]); 
	}
	return newArr; 
};
// or:
Array.prototype.uniq = function(){
	var newArr = [];
	for(var i = 0; i < this.length; i++){  
		if(newArr.indexOf(this[i]) == -1)newArr.push(this[i]); 
	}
	return newArr;
};

6、bind兼容

if (!Function.prototype.bind) {
    Function.prototype.bind = function(obj) {
        var _self = this, args = arguments;
        return function() {
            _self.apply(obj, Array.prototype.slice.call(args, 1));
        }
    };
}

  

7、浏览器类型

function getOs() {
    if (navigator.userAgent.indexOf("MSIE") > 0)return 1;//IE
    if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0)return 2;//Firefox
    if (isSafari = navigator.userAgent.indexOf("Chrome") > 0)return 3;//Chrome
    if (isSafari = navigator.userAgent.indexOf("Safari") > 0)return 4;//Safari
    if (isCamino = navigator.userAgent.indexOf("Camino") > 0)return 5;//Camino
    if (isMozilla = navigator.userAgent.indexOf("Gecko/") > 0)return 6;//Gecko
    //other...
    return 0;
}

//Jquery:
$.browser.msie == true
$.browser.safari == true
$.browser.opera == true
$.browser.mozilla == true

8、event.srcElement和event.target

ie支持前者,firefox和chrome等浏览器支持后者。但ie下可直接使用event(window.event),firefox不能直接使用event。解决办法:

function myfunc()
{
    var evt = getEvent();
    var element = evt.srcElement || evt.target;
}

function getEvent()
{
    if (document.all)
    {
        return window.event;//如果是ie
    }
    func = getEvent.caller;
    while (func != null)
    {
        var arg0 = func.arguments[0];
        if (arg0)
        {
            if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof(arg0) == "object" && arg0.preventDefault && arg0.stopPropagation))
            {
                return arg0;
            }
        }
        func = func.caller;
    }
    return null;
}

9、用鼠标滚轮控制图片大小

//img onmousewheel="return bbimg(this)"
function bbimg(o) {
    var zoom = parseInt(o.style.zoom, 10) || 100;
    zoom += event.wheelDelta / 12;
    if (zoom > 0) o.style.zoom = zoom + '%';
    return false;
}

猜你喜欢

转载自www.cnblogs.com/zycjwdss/p/1886265.html
今日推荐