写一个事件侦听器函数?
(相当于封装一个util兼容主流浏览器和IE)
var EventUtil = {
//根据情况分别使用dom2 || IE || dom0方式 来添加事件
addHandler: function(element,type,handler) {
if(element.addEventListener) {
element.addEventListener(type,handler,false);
} else if(element.attachEvent) {
element.attachEvent("on" + type,handler);
} else {
element["on" + type] = handler;
}
},
//根据情况分别获取DOM或者IE中的事件对象,事件目标,阻止事件的默认行为
getEvent: function(event) {
return event ? event: window.event;
},
getTarget: function(event) {
return event.target || event.srcElement;
},
preventDefault: function(event) {
if(event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
//根据情况分别使用dom2 || IE || dom0方式 来删除事件
removeHandler: function(element,type,handler){
if(element.removeHandler) {
element.removeEventListener(type,handler,false);
} else if(element.detachEvent) {
element.detachEvent("on" + type,handler);
} else {
element["on" + type] = null;
}
}
//根据情况分别取消DOM或者IE中事件冒泡
stopPropagation: function(event) {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
}
}
var btn = document.getElementById("myBtn"),
handler = function () {
alert("Clicked");
};
EventUtil.addHandler(btn,"click",handler);
EventUtil.removeHandler(btn,"click",handler);
如何书写高性能代码
http://developer.51cto.com/ar...
怎样用js实现千位分隔符
function format (num) {
var reg=/\d{1,3}(?=(\d{3})+$)/g;
return (num + '').replace(reg, '$&,');
}
``
function format(num){
num=num+'';//数字转字符串
var str="";//字符串累加
for(var i=num.length- 1,j=1;i>=0;i--,j++){
if(j%3==0 && i!=0){//每隔三位加逗号,过滤正好在第一个数字的情况
str+=num[i]+",";//加千分位逗号
continue;
}
str+=num[i];//倒着累加数字
}
return str.split('').reverse().join("");//字符串=>数组=>反转=>字符串
}
编写一个方法 求一个字符串的字节长度
function getByte(str){
var len = str.length,
bytes = len,
i = 0;
for(; i<len; i++){
if (str.charCodeAt(i) > 255) bytes++;
}
return bytes;
}
JavaScript中如何对一个对象进行深度clone
function clone(obj) {
if (!obj && typeof obj !== 'object') {
return;
}
var copy = (obj instanceof Array)?[]:{};
for(var o in obj) {
if (typeof obj[o] === 'object') {
copy[o] = clone(obj[o]);
} else {
copy[o] = obj[o];
}
}
return copy;
}
var obj = {
name: 'zhangsan',
age: 33,
child:{
name:'zhangxiao',
age:9,
eat:[1,{el:2}]
},
hobby:undefined,
eat:[1,2,3,4]
}
var a=clone(obj)
obj.child.name = 'lis';
console.log(a);
以下代码运行结果
function say() {
var num = 888;
var sayAlert = function() { alert(num); }
num++;
return sayAlert;
}
var sayAlert = say();
sayAlert();//889
刚调用say()函数的时候sayAlert不会执行,因为没有啊sayAlert()这样调用
如何实现Array.prototype.forEach?
if (!Array.prototype.forEach) {
Array.prototype.forEach = function(fn){
for ( var i = 0; i < this.length; i++ ) {
fn( this[i], i, this );
}
};
}
js怎么获取非行内样式
function getStyle(obj, attr){
if(obj.currentStyle) {
obj.currentStyle[attr]
} else {
getComputedStyle(obj, null)[attr];
}
}
求数组中出现次数最多的元素和次数
<script>
var arr = [1,1,1,4,5,4];
var obj = {};
for(var ar in arr){
if(obj[arr[ar]]){
obj[arr[ar]]++;
} else {
obj[arr[ar]] = 1;
}
}
console.log(obj);
var res = [];
for(var o in obj) {
res.push({el: o,val:obj[o]});
}
res.sort(function(a,b){
return -(a.val-b.val);
})
console.log(res[0])
</script>