這幾天整理了一下思路,本來覺得DOM部分會有很多東西,但是忽然發現頻繁使用的其實並不太多
class
class處理部分主要有四個
hasClass:檢查元素是否包含某個class
addClass:為元素新增一個class
removeClass:為元素刪除一個class
toggleClass:切換元素的class, 如果只傳入一個class,則切換這個class的有無;如果傳入兩個class,則元素刪除當前class,替換為另一個
hasClass : function(element, className) { var re = new RegExp("(^|\\s)" + className + "(\\s|$)", "i"); if (element.className.match(re)) return true; return false; }, addClass : function(element, className) { var re = new RegExp("(^|\\s)" + className + "(\\s|$)", "gi"); var eleClass = element.className; if (!eleClass.match(re)) element.className = eleClass + " " + className; }, removeClass : function(element, className) { var re = new RegExp("(^|\\s)" + className + "(\\s|$)", "gi"); var eleClass = element.className; eleClass = eleClass.replace(re, ""); if (element.className != eleClass) element.className = eleClass; }, toggleClass:function(element,class1,class2){ if(class2!=undefined){ if(ssLib.hasClass(element,class1)){ ssLib.removeClass(element,class1); ssLib.addClass(element,class2); }else if(ssLib.hasClass(element,class2)){ ssLib.removeClass(element,class2); ssLib.addClass(element,class1); } }else{ if(ssLib.hasClass(element,class1)){ ssLib.removeClass(element,class1); }else{ ssLib.addClass(element,class1); } } },
元素尺寸
元素尺寸有兩個方法
getRect:獲取元素尺寸,同時包含其上下左右四個邊的位置
getViewPortSize:獲取可視視窗(ViewPort,不含滾動條)尺寸
getScrollSize:獲取元素(包含滾動條)尺寸
getRect : function(element) { var rect = element.getBoundingClientRect(); if (typeof rect.width == 'undefined') { _rect = { width : rect.right - rect.left, height : rect.bottom - rect.top, top : rect.top, bottom : rect.bottom, left : rect.left, right : rect.right }; return _rect; } return rect; }, getViewPortSize : function() { if (document.compatMode == "CSS1Compat") { return { width : document.documentElement.clientWidth, height : document.documentElement.clientHeight }; } else { return { width : document.body.clientWidth, height : document.body.clientHeight }; } }, getScrollSize : function(element) { var e = element || (document.compatMode == "CSS1Compat" ? document.documentElement: document.body); return { width : Math.max(element.scrollWidth, element.clientWidth),
height : Math.max(element.scrollHeight, element.clientHeight)
};
},
元素位置
getScrollPos:獲取元素滾動條位置
getViewPortPos:獲取元素相對於可視視窗(ViewPort,不包括滾動條)的位置
getAbsolutePos:獲取元素相對於文件(包含滾動條)位置
getOffsetPos:獲取文件相對於父容器位置
getScrollPos : function(element) { var e = element || (document.compatMode == "CSS1Compat" ? document.documentElement : document.body); return { x : e.scrollTop, y : e.scrollLeft }; }, getViewPortPos : function(element) { var rect = element.getBoundingClientRect(); return { x : rect.left, y : rect.top }; }, getAbsolutePos : function(element) { var rect=element.getBoundingClientRect(); var doc = document.compatMode == "CSS1Compat" ? document.documentElement : document.body; return{ x:rect.left+Math.max(doc.scrollLet,doc.clientLeft), y:rect.top+Math.max(doc.scrollTop,doc.clientTop) }; }, getOffsetPos:function(element){ return{ x:element.offsetLeft, y:elementoffsetTop }; }
元素屬性/樣式
這個借鑑了一下jQuery的寫法
attr:獲取/設定元素的屬性值
css:獲取/設定元素的style
這兩個函式是臨時想到的,還沒想好怎麼寫,明天晚上補上吧
PS.最近公司太忙,拖了這麼久終於補上了,由於內容不少,另外寫了一篇據說每個大牛、小牛都應該有自己的庫——DOM處理續,另外由於這次寫的倉促,除了很多漏洞,謝謝大家不吝指教,感覺進步了很多