//1.指定元素后插入dom function insertAfter(newElement, targetElement) { var parent = targetElement.parentNode; if (parent.lastChild === targetElement) { parent.appendChild(newElement); } else { parent.insertBefore(newElement, targetElement.nextSibling); } } //2.类型判断 function _typeOf(obj) { var map = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[object Array]': 'array', '[object Date]': 'date', '[object RegExp]': 'regExp', '[object Undefined]': 'undefined', '[object Null]': 'null', '[object Object]': 'object' }; return map[Object.prototype.toString.call(obj)]; } //阻止默认事件 function preventDefault(event) { var ev = event || window.event; if (typeof ev.preventDefault != 'undefined') {//w3c ev.preventDefault(); } else { ev.returnValue = false;//ie } } //阻止冒泡 function stopBubble(e) { //如果提供了事件对象,则是一个非IE浏览器 if (e && e.stopPropagation) //因此它支持W3C的stopPropagation()方法 e.stopPropagation(); else //否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble = true; } //深度合并对象 function deepObjectMerge(FirstOBJ, SecondOBJ) { // 深度合并对象 for (var key in SecondOBJ) { FirstOBJ[key] = FirstOBJ[key] && ["[object Array]", "[object Object]"].indexOf(Object.prototype.toString.call(FirstOBJ[key])) !== -1 ? deepObjectMerge(FirstOBJ[key], SecondOBJ[key]) : FirstOBJ[key] = SecondOBJ[key]; } return FirstOBJ; } //深拷贝 function deepClone(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝 var objClone = Array.isArray(obj) ? [] : {}; //进行深拷贝的不能为空,并且是对象或者是 if (obj && typeof obj === "object") { for (key in obj) { if (obj.hasOwnProperty(key)) { if (obj[key] && typeof obj[key] === "object") { objClone[key] = deepClone(obj[key]); } else { objClone[key] = obj[key]; } } } } return objClone; } //是否是指定dom的子元素 function isInDom(target, dom, _body) { var body = _body ? _body : document.querySelector('body') if (target === dom) { return true } else if (target.parentNode) { return isInDom(target.parentNode, dom, body) } else { return false } } //添加监听事件 function addEvent(ele, event, fn) { //通过判断调用的方式兼容IE678 //判断浏览器是否支持该方法,如果支持那么调用,如果不支持换其他方法 if (ele.addEventListener) { //直接调用 ele.addEventListener(event, fn); } else if (ele.attachEvent) { ele.attachEvent("on" + event, fn); } else { //在addEventListener和attachEvent都不存在的情况下,用此代码 var oldEvent = ele["on" + event]; ele["on" + event] = function () { if (oldEvent) oldEvent() fn() }; } } //事件监听+移除 var EventUtil = { /*检测绑定事件*/ 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 /*直接赋给事件*/ } } , /*通过removeHandler*/ removeHandler: function (element, type, handler) { /*Chrome*/ if (element.removeEventListener) element.removeEventListener(type, handler, false); else if (element.deattachEvent) { /*IE*/ element.deattachEvent('on' + type, handler); } else { element["on" + type] = null; /*直接赋给事件*/ } } }
js 封装方法
最新推荐文章于 2022-06-24 14:41:03 发布