DOM库封装练习
var utils = (function () {
var flg = 'getComputedStyle' in window;//惰性思想的运用;
function makeArray(arg) {
if (flg) {//标准浏览器
return Array.prototype.slice.call(arg);
} else {
var ary = [];
for (var i = 0; i < arg.length; i++) {
ary.push(arg[i]);
}
return ary;
}
} function jsonParse(jsonStr) {
return 'JSON' in window ? JSON.parse(jsonStr) : eval('(' + jsonStr + ')');
} function rnd(n, m) {
n = Number(n);
m = Number(m);
if (isNaN(n) || isNaN(m)) {
return Math.random();//当返回0-1之间的随机小数,说明参数传错了;
}
if (n > m) {
var tmp = m;
m = n;
n = tmp;
}
return Math.round(Math.random() * (m - n) + n);
} function getByClass(strClass, parent) {
parent = parent || document;
if (flg) {
return this.makeArray(parent.getElementsByClassName(strClass));
}
//对IE浏览器兼容处理;
var aryClass = strClass.replace(/(^ +)|( +$)/g, '').split(/\s+/g);
var nodeList = parent.getElementsByTagName('*');
var ary = [];
for (var i = 0; i < nodeList.length; i++) {
var cur = nodeList[i];
var bOk = true;
for (var j = 0; j < aryClass.length; j++) {
var reg = new RegExp('(^| +)' + aryClass[j] + '( +|$)');
if (!reg.test(cur.className)) {
bOk = false;
break;
}
}
if (bOk) {
ary.push(cur);
}
}
return ary;
} function hasClass(curEle, cName) {
var reg = new RegExp('(^| +)' + cName + '( +|$)', 'g');
return reg.test(curEle.className);
} function addClass(curEle, strClass) {
var aryClass = strClass.replace(/(^ +)|( +$)/g, '').split(/\s+/g);
for (var i = 0; i < aryClass.length; i++) {
if (!this.hasClass(curEle, aryClass[i])) {
curEle.className += ' ' + aryClass[i];
}
}
} function removeClass(curEle, strClass) {
var aryClass = strClass.replace(/(^ +)|( +$)/g, '').split(/\s+/g);
for (var i = 0; i < aryClass.length; i++) {
var reg = new RegExp('(^| +)' + aryClass[i] + '( +|$)', 'g');
if (reg.test(curEle.className)) {
curEle.className = curEle.className.replace(reg, ' ').replace(/(^ +)|( +$)/g, '').replace(/\s+/g, ' ');
}
}
} function getCss(curEle, attr) {
var val = null;
var reg = null;
if (flg) {
val = getComputedStyle(curEle, false)[attr];
} else {
if (attr === 'opacity') {
val = curEle.currentStyle['filter'];//‘alpha(opacity=10)’;
reg = /^alpha\(opacity[=:](\d+(\.\d+)?)\)$/;
return reg.test(val) ? RegExp.$1 / 100 : 1;
}
val = curEle.currentStyle[attr];
}
//如果带单位了,干掉单位;
reg = /^([+-])?(\d+(\.\d+)?)(px|pt|rem|em)?$/gi;
return reg.test(val) ? parseFloat(val) : val;
} function setCss(curEle, attr, value) {
//升级3:处理float
if (attr === 'float') {
curEle.style.cssFloat = value;
curEle.style.styleFloat = value;
return;
}
//升级2:处理透明度
if (attr == 'opacity') {
curEle.style.opacity = value;
curEle.style.filter = 'alpha(opacity=' + (value * 100) + ')';
return;
}
var reg = /(width|height|top|right|bottom|left|((margin|padding)(top|right|bottom|left)?))/gi;
//升级1:处理单位;
if (reg.test(attr)) {
if (value !== 'auto' || value.toString().indexOf('%') == -1) {
value = parseFloat(value) + 'px';
}
}
curEle.style[attr] = value;
} function setGroupCss(curEle, opt) {
if (Object.prototype.toString.call(opt) !== '[object Object]') return;
for (var attr in opt) {
this.setCss(curEle, attr, opt[attr]);
} } function css(curEle) {
var argTwo = arguments[1];
if (typeof argTwo === 'string') {
var argThree = arguments[2];
if (argThree === undefined) {//第三个参数没有-获取
return this.getCss(curEle, argTwo);
} else {//当有第三个参数-设置一个样式
this.setCss(curEle, argTwo, argThree);
}
}
if ({}.toString.call(argTwo) === '[object Object]') {
this.setGroupCss(curEle, argTwo);
}
} function win(attr, value) {
if (value === undefined) {
return document.documentElement[attr] || document.body[attr];
}
document.documentElement[attr] = document.body[attr] = value;
} function offset(curEle) {
var l = curEle.offsetLeft;
var t = curEle.offsetTop;
var par = curEle.offsetParent;
while (par) {
if (window.navigator.userAgent.indexOf('MSIE 8') == -1) {
l += par.clientLeft;
t += par.clientTop;
}
l += par.offsetLeft;
t += par.offsetTop;
par = par.offsetParent;
}
return {left: l, top: t}
} function getChildren(curEle, tagName) {
var childs = curEle.childNodes;//获取所有的子节点
var ary = [];
for (var i = 0; i < childs.length; i++) {
var cur = childs[i];
if (cur.nodeType == 1) {//首先保证是子元素,再考虑是否过滤;
if (tagName) {
if (cur.tagName.toLocaleLowerCase() === tagName.toLowerCase()) {
ary.push(cur);
}
} else {
ary.push(cur)
}
}
}
return ary;
} function prev(curEle) {
if (flg) {
return curEle.previousElementSibling;
}
var pre = curEle.previousSibling;
while (pre && pre.nodeType !== 1) {
pre = pre.previousSibling;
}
return pre;
} function next(curEle) {
if (flg) {
return curEle.nextElementSibling;
}
var nex = curEle.nextSibling;
while (nex && nex.nodeType !== 1) {
nex = nex.nextSibling;
}
return nex;
} function sibling(curEle) {
var ary = [];
var pre = this.prev(curEle);
var nex = this.next(curEle);
if (pre) ary.push(pre);
if (nex) ary.push(nex);
return ary;
} function prevAll(curEle) {
var ary = [];
var pre = this.prev(curEle);
while (pre) {
ary.push(pre);
pre = this.prev(pre);
}
return ary;
} function nextAll(curEle) {
var nex = this.next(curEle);
var ary = [];
while (nex) {
ary.push(nex);
nex = this.next(nex);
}
return ary;
} function siblings(curEle) {
var ary1 = this.prevAll(curEle);
var ary2 = this.nextAll(curEle);
return ary1.concat(ary2);
} function firstChild(curEle) {
var children = this.getChildren(curEle);
return children[0];
} function lastChild(curEle) {
var children = this.getChildren(curEle);
return children[children.length - 1];
} function index(curEle) {
return this.prevAll(curEle).length;
} function appendChild(curEle, parent) {
parent.appendChild(curEle);
} function prependChild(curEle, parent) {
var first = this.firstChild(parent);
if (first) {
parent.insertBefore(curEle, first);
} else {
parent.appendChild(curEle);
}
} function insertBefore(curEle, oldEle) {
oldEle.parentNode.insertBefore(curEle, oldEle);
} function insertAfter(curEle, oldEle) {
var nex = this.next(oldEle);
if (nex) {
oldEle.parentNode.insertBefore(curEle, nex);
} else {
oldEle.parentNode.appendChild(curEle);
}
} return {
//makeArray:类数组转数组
makeArray: makeArray,
//jsonParse:把JSON格式的字符串转成JSON格式的数据(对象)
jsonParse: jsonParse,
//rnd:求一定范围的随机数,包含最大值;
rnd: rnd,
//getByClass:通过class名,可以限制范围的获取元素
getByClass: getByClass,
//hasClass:判断元素身上是否有某个class名
hasClass: hasClass,
//addClass:给元素批量添加出class名
addClass: addClass,
//removeClass:从元素身上批量删除class名
removeClass: removeClass,
//getCss:获取非行间样式
getCss: getCss,
//setCss:给元素设置一个样式
setCss: setCss,
//setGroupCss:给元素设置一组样式
setGroupCss: setGroupCss,
//css:集获取,设置一个,设置一组为一体;
css: css,
//win:浏览器盒子模型的兼容处理
win: win,
//offset:元素偏移量的兼容处理;
offset: offset,
//getChildren:获取当前元素下的所有子元素(可以通过标签名过滤子元素)
getChildren: getChildren,
//prev:获取当前元素的上一个哥哥元素
prev: prev,
//next:获取当前元素的下一个弟弟元素
next: next,
//sibling:获取当前元素的相邻元素;
sibling: sibling,
//prevAll:获取当前元素所有的哥哥元素
prevAll: prevAll,
//nextAll:获取当前元素所有的弟弟元素
nextAll: nextAll,
//siblings:获取当前元素所有的兄弟元素;
siblings: siblings,
//firstChild:获取当前容器下第一个子元素
firstChild: firstChild,
//lastChild:获取当前容器下最后一个子元素
lastChild: lastChild,
//index:当前元素的索引(当前元素排行第几);
index: index,
//appendChild:把新元素插入到父容器的末尾;
appendChild: appendChild,
//prependChild:把新元素插入到父容器的开头;
prependChild: prependChild,
//insertBefore:把新元素插入到指定元素的前面
insertBefore: insertBefore,
//insertAfter:把新元素插入到指定元素的后面;
insertAfter: insertAfter
}
})();

JS学习:第二周——NO.4DOM库的更多相关文章

  1. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  2. 201671010140. 2016-2017-2 《Java程序设计》java学习第二周

                                 学习第二周(Java基本程序设计结构)      这一周,着重学习了Java的简单程序设计实现及运行,通过自己操作,发现Java的程序语法大面 ...

  3. H5学习第二周

    怎么说,在各种感觉中h5学习的第二周已经过来了,先总结一下,感觉学习h5是一件让我爱恨交加的事,学会一些新的知识并把它成功运行出来的时候是非常激动和兴奋的,但是有时候搞不懂一个标签或者属性的时候,就有 ...

  4. Java学习第二周学习笔记

    20145307<Java程序设计>第二周学习总结 教材学习内容总结 Java语言中的很多基本语法都和C语言类似,以下Java中的基本语法 标识符 标识符是程序中自定义的一些名称. 由26 ...

  5. IP通信基础学习第二周

    此周的课程学习应该算是我对此科目真正学校生涯的开始吧,尽管我对该科目仍感到很陌生. 课程一开头,老师就给我们简单的介绍了网络的定义.发展及其分类,重点讲了网络拓扑结构及其在局域网上具体的分层情况.该部 ...

  6. Js学习(6) 标准库-Array对象

    Array是Js的原生对象,同时也是一个构造函数,可以用它生成新的数组 用不用new结果都一样 var arr = new Array(2); // 等同于 var arr = Array(2); 但 ...

  7. Java学习第二周

    这一周观看了黑马程序员毕向东的教学视频学习了数组的创建:数组元素的使用及遍历,类的声明,成员方法的声明,构造器的声明 数据类型[] 数组名 = new 数据类型[长度];数据类型[] 数组名 = {数 ...

  8. JS学习第二课

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. Ext JS学习第二天 我们所熟悉的javascript(一)

    此文用来记录学习笔记: •ExtJS是一个强大的javascript框架,如果想真正的掌握ExtJS,那么我们必须要对javascript有一定的认识,所以很有必要静下心来,抱着一本javascrip ...

随机推荐

  1. font-size 兼容问题

    早年~ 楔子 在为“我的抵扣券”添加  按钮时,为了将文字隐掉,给节点设置了“font-size:0;”,设置后刷一下浏览器,webkit下按钮掉下去了,而其他浏览器(包括IE6/7)都正常: 按理说 ...

  2. 理解ASP.NET MVC的DependencyResolver组件

    一.前言 DependencyResolver是MVC中一个重要的组件,从名字可以看出,它负责依赖对象的解析,可以说它是MVC框架内部使用的一个IOC容器.MVC内部很多对象的创建都是通过它完成的,或 ...

  3. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)

    前言:出于某种原因,需要学习下Knockout.js,这个组件很早前听说过,但一直没尝试使用,这两天学习了下,觉得它真心不错,双向绑定的机制简直太爽了.今天打算结合bootstrapTable和Kno ...

  4. java Ajax的应用

    一.Ajax的使用步骤 步一:创建AJAX异步对象,例如:createAJAX() 步二:准备发送异步请求,例如:ajax.open(method,url) 步三:如果是POST请求的话,一定要设置A ...

  5. 【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

    http://hihocoder.com/problemset/problem/1454 调了好长时间,谜之WA... 等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻ #include& ...

  6. c++中的lambda特性

    来源: http://www.jb51.net/article/56147.htm cocos2dx3.0测试: 1.有参数a,b printf("lambda=%lf", []( ...

  7. Genymotion安装问题

    今天安装虚拟机各种报错,网上收了各种资料,然而并不能解决问题.啥也没干整整一天总算找到解决方案解决.     解决方法︰ 删除所有以前的虚拟框适配器 转到设备管理器中,单击"操作" ...

  8. 学记:spring boot使用官网推荐以外的其他数据源druid

    虽然spring boot提供了4种数据源的配置,但是如果要使用其他的数据源怎么办?例如,有人就是喜欢druid可以监控的强大功能,有些人项目的需要使用c3p0,那么,我们就没办法了吗?我们就要编程式 ...

  9. [bzoj3626][LNOI2014]LCA

    Description 给出一个$n$个节点的有根树(编号为$0$到$n-1$,根节点为$0$). 一个点的深度定义为这个节点到根的距离$+1$. 设$dep[i]$表示点$i$的深度,$lca(i, ...

  10. 【bzoj4423】 AMPPZ2013—Bytehattan

    http://www.lydsy.com/JudgeOnline/problem.php?id=4423 (题目链接) 题意 给出一个N*N的格点图,m次操作,每次切断U,V之间的边,问切断之后,U, ...