山寨HTML5API classList类
2020-11-18 06:19
标签:api javascript classlist 觉得自己去写一些类,你真的会找到自己不足的地方。其实厉害不是你实现一个类,而是你如何去设计一个类,能让开发者更加容易操作。对于这个操作样式,可以通过javascript访问style,可是在《javascript高级程序设计》中有讲到这样子CSS、javascript、HTML耦合度太高,不太适合维护;还有就是通过className,但是我们知道className是一个可以被开发者读写的字符串,如果要增删查改元素对应的className的话,可以实现,但是比较麻烦。这个时候HTML5站出来了,提出了classList类,确实方便我们开发者去使用,但是它有一个弊端就是兼容性不是很好。 确实觉得这样的API让开发者少做很多苦力活,详细的可以去看element.classList,毕竟上面不是我想深入了解的知识点,我想深入了解的是,自己先去模仿别人设计的API,看自己能不能扩展那个API(很显然自己还没达到那种程度)。 在这里说明下我定义的CSSClassList可以到我《javascript正则表达式 "\b"问题》找,这里我就不详述了。我们主要还是来实现上面说的4个方法,可以在不支持classListAPI的浏览器上用 CSSClassList.prototype.contains = function(cls) { var classname = this.el.className, reg = new RegExp("\\b" + cls + "\\b"); return reg.test(classname); } 遇见的问题: 解决问题(1就是对应上面的问题1,以此类推)
CSSClassList.prototype.add = function(cls) { var classname = this.el.className; if (this.contains(cls)) return; else { var arr = classname.split(/\s+/); arr.push(cls); this.el.className = arr.join(" "); }} 设计思路: 如果在该元素中找到class的话,就不添加了。找不到就添加,如何去添加?我把该元素的className字符 串转成数组,然后使用数组的push方法并把数组转换成字符串赋值给该元素的className 遇见的问题: 解决问题: CSSClassList.prototype.remove = function(cls) { var classname = this.el.className; if (!this.contains(cls)) return -1; else { //indexOf还是有兼容性问题 var arr = classname.split(/\s+/), index = arrIndexOf(arr, cls); arr.splice(index, 1); this.el.className = arr.join(" "); return (this.el.className); } 遇到问题 解决问题 function arrIndexOf(arr, searchEl) { if (arr.indexOf) { return arr.indexOf(searchEl); } else { for (var i = 0, len = arr.length; i if (arr[i] === searchEl) return i; } return -1; } } CSSClassList.prototype.toggle = function(cls) { if (!this.contains(cls)) this.add(cls); else this.remove(cls); } 在写这个类的时候确实还是遇到很多问题,但是总是能一一解决。我觉得一个程序员最重要的是他的解决问题的能力吧。毕竟自己写的类也不是很多,可能是自己的处女作吧,还是会有许多问题出现的,有空的话,我会看看其他大牛写的代码,然后两者再比较,有对比才有差距才有进步。 山寨HTML5API classList类,搜素材,soscw.com 山寨HTML5API classList类 标签:api javascript classlist 原文地址:http://blog.csdn.net/monkindey/article/details/24811785preface
introduction
description
就不用我过多去解释了吧,应该看完代码很容易懂吧,我也不是什么大牛级,所以我写的代码还是很平易近人的。
summary