这几天整理了一下思路,本来觉得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处理续,另外由于这次写的仓促,除了很多漏洞,谢谢大家不吝指教,感觉进步了很多

据说每个大牛、小牛都应该有自己的库——DOM处理的更多相关文章

  1. 据说每个大牛、小牛都应该有自己的库——DOM处理续

    在上篇据说每个大牛.小牛都应该有自己的库——DOM处理最后剩下attr()和css()方法没有处理,因为这两个方法当时并不自计划中,是写着写着突然想到的,一时间没有特别好的思路,当时已十一点多了,就去 ...

  2. 据说每个大牛、小牛都应该有自己的库——JavaScript原生对象拓展

    在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏,一是,关于写个自己的库的想法由来 ...

  3. 据说每个大牛、小牛都应该有自己的库——Event处理

    今天抽时间写了一部分Event处理方面的函数愈发的觉得jQuery的优秀,自己前期的想法太粗糙,造成后面这些函数参数很多,操作很很不直观,看样子是要重构的节奏,还好小伙儿伴们安慰,架构都是改出来的.继 ...

  4. 据说每个大牛、小牛都应该有自己的库——Ajax

    蹉跎到今天终于要写Ajax部分了,平时工作中除了选择器我用jQuery的最多的就是ajax,所以这部分在自己的框架中必不可少. XMLHttpRequest 我以为对每个使用过Ajax的人来说XMLH ...

  5. 让所有网站都提供API的Python库:Toapi

    这是一个让所有网站都提供API的Python库.以前,我们爬取数据,然后把数据存起来,再创造一个api服务以便其他人可以访问.为此,我们还要定期更新我们的数据.这个库让这一切变得容易起来.你要做的就是 ...

  6. Xcode 5.1 编译模拟器以及真机都能使用的静态库

    Xcode 5.1.dmg 下载地址 http://pan.baidu.com/s/1jGJpKm6 1.新建 Framework & Library 工程 我起名叫ShowInfo,下面为其 ...

  7. pycharm每次新建项目都要重新安装一些第三方库的解决办法(转载防删)

    目前有三个解决办法,也是亲测有用的: 第一个方法:因为之前有通过pycharm的project interpreter里的+号添加过一些库,但添加的库只是指定的项目用的,如果想要用,就必须用之前的项目 ...

  8. 每个android项目都应该使用的android 库

    http://blog.teamtreehouse.com/android-libraries-use-every-project A good developer knows to never re ...

  9. JavaScript原生对象拓展

    JavaScript原生对象拓展 在据说每个大牛.小牛都应该有自己的库——框架篇中我扬言要做个小牛,没想到一天没更新,小伙儿伴们就戏谑的问我,油哥是不是要太监了?其实事情是这个样子的,这不是太监的节奏 ...

随机推荐

  1. Java Web1

    Java Web应用的核心技术是Java Server Page和Servlet.此外,开发一个完整的Java Web应该涉及一下几种概念及技术. 1.Servlet组件       Servlet响 ...

  2. 安装完ODAC,出现ORA-12560:TNS:协议适配器错误 12541 无监听程序的解决

    进入系统环境变量设置,查看Path路径,发现D:\oracle\product\11.2.0\client_1等路径放到了oracle11g数据库路径前面,将新加入的路径置后即可解决ORA-12560 ...

  3. adb unknown host service 这个问题的解决,转载

    一直没搞明白这个问题咋出现的,但今天看到一个方法,搞定了!原来是豌豆荚占用了 5037 端口导致. 参见原文章:一个豌豆荚引发的血案——关于ADB server didn't ACK的问题 简单来讲, ...

  4. C++面试中关于sizeof问题总结

    原文:http://blog.sina.com.cn/s/blog_7c983ca60100yfdv.html#SinaEditor_Temp_FontName (1)      sizeof是操作符 ...

  5. MATLAB寻找数组前k个大值

    有时候我们需要寻找数组的前k个大值并按照顺序输出, 在C语言可以通过快速排序等算法,快速求得,这里用matlab写了一个比较简单实用的程序(适用于数组长度不是特别大的情况). function [va ...

  6. 15.Xcode8 升级遇到的问题

    一:注释快捷键cmd+/不能用,解决方法: 1. Swift_3.0 没法快捷键(command+/)注释的原因:这个是因为苹果解决xcode ghost,把插件屏蔽了. 2. 解决办法: (1) 终 ...

  7. java中数组的相关知识

      1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...

  8. XAF ObjectSpace保存时添加记录

    点击保存按钮时自动添加相关记录(用于界面查看),另外还有Audit控件可使用,此处只是一个简单的功能. 新建一个VC并关联到相关的View,代码如下: public partial class Gon ...

  9. mysql无法登录

    很久没用root账户登录mysql发现无法登录 以为root密码被修改 修改root密码后还是无法登录 判断ip没权限 运行 Grant all privileges on *.* to 'root' ...

  10. Winodow Server Backup学习向导-window 2008

    1.安装Window Server Backup 2.备份服务器 3.恢复服务器 4.优化和备份服务器性能 Windows Server Backup 中的新增功能有哪些? Windows Serve ...