编写自己的代码库(javascript常用实例的实现与封装)
1.前言
大家在开发的时候应该知道,有很多常见的实例操作。比如数组去重,关键词高亮,打乱数组等。这些操作,代码一般不会很多,实现的逻辑也不会很难,下面的代码,我解释就不解释太多了,打上注释,相信大家就会懂了。但是,用的地方会比较,如果项目有哪个地方需要用,如果重复写的话,就是代码沉余,开发效率也不用,复用基本就是复制粘贴!这样是一个很不好的习惯,大家可以考虑一下把一些常见的操作封装成函数,调用的时候,直接调用就好!
源码都放在github上了,大家想以后以后有什么修改或者增加的,欢迎大家来star一下ec-do。
1.下面代码,我放的是es5版本的,如果大家需要看es6版本的,请移步ec-do2.0.0.js
2.想看完整代码的,或者部分实例的demo,建议去github看!
3.下面的代码,都是封装在ecDo这个对象里面,如果里面有this,除了特别说明的,都是指向ecDo
2.字符串操作
2-1去除字符串空格
1 | //去除空格 type 1-所有空格 2-前后空格 3-前空格 4-后空格 |
2-2字母大小写切换
1 | /*type |
2-3字符串循环复制
1 | //repeatStr(str->字符串, count->次数) |
2-4字符串替换
1 | //ecDo.replaceAll('这里是上海,中国第三大城市,广东省省会,简称穗,','上海','广州') |
2-5替换*
1 | //字符替换* |
2-6检测字符串
1 | //检测字符串 |
2-7 检测密码强度
1 | //ecDo.checkPwd('12asdASAD') |
2-8随机码(toString详解)
1 | //count取值范围0-36 |
2-9查找字符串
可能标题会有点误导,下面我就简单说明一个需求,在字符串'sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967'
中找出’blog’的出现次数。代码如下
1 | //var strTest='sad44654blog5a1sd67as9dablog4s5d16zxc4sdweasjkblogwqepaskdkblogahseiuadbhjcibloguyeajzxkcabloguyiwezxc967' |
2-10 过滤字符串
1 | //过滤字符串(html标签,表情,特殊字符) |
2-11格式化处理字符串
1 | //ecDo.formatText('1234asda567asd890') |
2-12找出最长单词
1 | //ecDo.longestWord('Find the Longest word in a String') |
2-13句中单词首字母大写
1 | //这个我也一直在纠结,英文标题,即使是首字母大写,也未必每一个单词的首字母都是大写的,但是又不知道哪些应该大写,哪些不应该大写 |
3.数组操作
3-1数组去重
1 | removeRepeatArray: function (arr) { |
3-2数组顺序打乱
1 | upsetArr: function (arr) { |
3-3数组最大值最小值
1 | //数组最大值 |
3-4数组求和,平均值
1 | //这一块的封装,主要是针对数字类型的数组 |
3-5从数组中随机获取元素
1 | //ecDo.randomOne([1,2,3,6,8,5,4,2,6]) |
3-6返回数组(字符串)一个元素出现的次数
1 | //ecDo.getEleCount('asd56+asdasdwqe','a') |
3-7返回数组(字符串)出现最多的几次元素和出现次数
1 | //arr, rank->长度,默认为数组长度,ranktype,排序方式,默认降序 |
3-8得到n1-n2下标的数组
1 | //ecDo.getArrayNum([0,1,2,3,4,5,6,7,8,9],5,9) |
3-9筛选数组
1 | //删除值为'val'的数组元素 |
3-10 获取对象数组某些项
1 | //var arr=[{a:1,b:2,c:9},{a:2,b:3,c:5},{a:5,b:9},{a:4,b:2,c:5},{a:4,b:5,c:7}] |
3-11 排除对象数组某些项
1 | //var arr=[{a:1,b:2,c:9},{a:2,b:3,c:5},{a:5,b:9},{a:4,b:2,c:5},{a:4,b:5,c:7}] |
3-12 对象数组排序
1 | //var arr=[{a:1,b:2,c:9},{a:2,b:3,c:5},{a:5,b:9},{a:4,b:2,c:5},{a:4,b:5,c:7}] |
3-13 数组扁平化
1 | //ecDo.steamroller([1,2,[4,5,[1,23]]]) |
4.基础DOM操作
这个部分代码其实参考jquery的一些函数写法,唯一区别就是调用不用,参数一样.
比如下面的栗子
1 | //设置对象内容 |
4-1检测对象是否有哪个类名
1 | //检测对象是否有哪个类名 |
4-2 添加类名
1 | addClass: function (obj, classStr) { |
4-3删除类名
1 | removeClass: function (obj, classStr) { |
4-4替换类名(“被替换的类名”,”替换的类名”)
1 | replaceClass: function (obj, newName, oldName) { |
4-5获取兄弟节点
1 | //ecDo.siblings(obj,'#id') |
4-6设置样式
1 | css: function (obj, json) { |
4-7设置文本内容
1 | html: function (obj) { |
4-8显示隐藏
1 | show: function (obj) { |
5.其他操作
5-1cookie
1 | //cookie |
5-2清除对象中值为空的属性
1 | //ecDo.filterParams({a:"",b:null,c:"010",d:123}) |
5-3现金额大写转换函数
1 | //ecDo.upDigit(168752632) |
5-4获取,设置url参数
1 | //设置url参数 |
5-5随机返回一个范围的数字
1 | //ecDo.randomNumber(5,10) |
5-6随进产生颜色
1 | randomColor: function () { |
5-7Date日期时间部分
1 | //到某一个时间的倒计时 |
5-8适配rem
这个适配的方法很多,我就写我自己用的方法。大家也可以去我回答过得一个问题那里看更详细的说明!移动端适配问题
1 | getFontSize: function (_client) { |
5-9ajax
1 | /* 封装ajax函数 |
5-10图片懒加载
1 | //图片没加载出来时用一张图片代替 |
5-11关键词加标签
1 | //这两个函数多用于搜索的时候,关键词高亮 |
5-12数据类型判断
1 | //ecDo.istype([],'array') |
5-13手机类型判断
1 | browserInfo: function (type) { |
5-14函数节流
1 | //多用于鼠标滚动,移动,窗口大小改变等高频率触发事件 |
6.封装成形
可能有小伙伴会有疑问,这样封装,调用有点麻烦,为什么不直接在原型上面封装,调用方便。比如下面的栗子!
1 | String.prototype.trim=function(type){ |
所以在原生对象原型的修改很不推荐!至少很多的公司禁止这样操作!
所以建议的封装姿势是
1 | var ecDo={ |
7.小结
这篇文章,写了很久了,几个小时了,因为我写这篇文章,我也是重新改我以前代码的,因为我以前写的代码,功能一样,代码比较多,现在是边想边改边写,还要自己测试(之前的代码for循环很多,现在有很多简洁的写法代替)。加上最近公司比较忙,所以这一篇文章也是花了几天才整理完成。
源码都放在github上了,大家想以后以后有什么修改或者增加的,欢迎大家来star一下ec-do。
我自己封装这个,并不是我有造轮子的习惯,而是:
1,都是一些常用,但是零散的小实例,网上基本没有插件。
2,因为零散的小实例,涉及到的有字符串,数组,对象等类型,就算找到插件,在项目引入的很有可能不止一个插件。
3.都是简单的代码,封装也不难。维护也简单。
其他的不多说了,上面的只是我自己在开发中常用到,希望能帮到小伙伴们,最理想就是这篇文章能起到一个 抛砖引玉 的作用,就是说,如果觉得还有什么操作是常用的,或者觉得我哪里写得不好的,也欢迎指出,让大家相互帮助,相互学习。