Javascript总结(全)
说明
个人感觉总结得很好忍不住要分享,转载自github地址,作者博客原文发现打不开,于是复制粘贴到此处,如有侵权,请联系本人删除。
Type
- class TypeFn {
- isString (o) { //是否字符串
- return Object.prototype.toString.call(o).slice(, -) === 'String'
- }
- isNumber (o) { //是否数字
- return Object.prototype.toString.call(o).slice(, -) === 'Number'
- }
- isBoolean (o) { //是否boolean
- return Object.prototype.toString.call(o).slice(, -) === 'Boolean'
- }
- isFunction (o) { //是否函数
- return Object.prototype.toString.call(o).slice(, -) === 'Function'
- }
- isNull (o) { //是否为null
- return Object.prototype.toString.call(o).slice(, -) === 'Null'
- }
- isUndefined (o) { //是否undefined
- return Object.prototype.toString.call(o).slice(, -) === 'Undefined'
- }
- isObj (o) { //是否对象
- return Object.prototype.toString.call(o).slice(, -) === 'Object'
- }
- isArray (o) { //是否数组
- return Object.prototype.toString.call(o).slice(, -) === 'Array'
- }
- isDate (o) { //是否时间
- return Object.prototype.toString.call(o).slice(, -) === 'Date'
- }
- isRegExp (o) { //是否正则
- return Object.prototype.toString.call(o).slice(, -) === 'RegExp'
- }
- isError (o) { //是否错误对象
- return Object.prototype.toString.call(o).slice(, -) === 'Error'
- }
- isSymbol (o) { //是否Symbol函数
- return Object.prototype.toString.call(o).slice(, -) === 'Symbol'
- }
- isPromise (o) { //是否Promise对象
- return Object.prototype.toString.call(o).slice(, -) === 'Promise'
- }
- isSet (o) { //是否Set对象
- return Object.prototype.toString.call(o).slice(, -) === 'Set'
- }
- isFalse (o) {
- if (o == '' || o == undefined || o == null || o == 'null' || o == 'undefined' || o == || o == false || o == NaN) return true
- return false
- }
- isTrue (o) {
- return !this.isFalse(o)
- }
- isIos () {
- var u = navigator.userAgent;
- if (u.indexOf('Android') > - || u.indexOf('Linux') > -) {//安卓手机
- // return "Android";
- return false
- } else if (u.indexOf('iPhone') > -) {//苹果手机
- // return "iPhone";
- return true
- } else if (u.indexOf('iPad') > -) {//iPad
- // return "iPad";
- return false
- } else if (u.indexOf('Windows Phone') > -) {//winphone手机
- // return "Windows Phone";
- return false
- }else{
- return false
- }
- }
- isPC () { //是否为PC端
- var userAgentInfo = navigator.userAgent;
- var Agents = ["Android", "iPhone",
- "SymbianOS", "Windows Phone",
- "iPad", "iPod"];
- var flag = true;
- for (var v = ; v < Agents.length; v++) {
- if (userAgentInfo.indexOf(Agents[v]) > ) {
- flag = false;
- break;
- }
- }
- return flag;
- }
- browserType(){
- var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
- var isOpera = userAgent.indexOf("Opera") > -; //判断是否Opera浏览器
- var isIE = userAgent.indexOf("compatible") > - && userAgent.indexOf("MSIE") > - && !isOpera; //判断是否IE浏览器
- var isIE11 = userAgent.indexOf('Trident') > - && userAgent.indexOf("rv:11.0") > -;
- var isEdge = userAgent.indexOf("Edge") > - && !isIE; //判断是否IE的Edge浏览器
- var isFF = userAgent.indexOf("Firefox") > -; //判断是否Firefox浏览器
- var isSafari = userAgent.indexOf("Safari") > - && userAgent.indexOf("Chrome") == -; //判断是否Safari浏览器
- var isChrome = userAgent.indexOf("Chrome") > - && userAgent.indexOf("Safari") > -; //判断Chrome浏览器
- if (isIE) {
- var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
- reIE.test(userAgent);
- var fIEVersion = parseFloat(RegExp["$1"]);
- if(fIEVersion == ) return "IE7"
- else if(fIEVersion == ) return "IE8";
- else if(fIEVersion == ) return "IE9";
- else if(fIEVersion == ) return "IE10";
- else return "IE7以下"//IE版本过低
- }
- if (isIE11) return 'IE11';
- if (isEdge) return "Edge";
- if (isFF) return "FF";
- if (isOpera) return "Opera";
- if (isSafari) return "Safari";
- if (isChrome) return "Chrome";
- }
- checkStr (str, type) {
- switch (type) {
- case 'phone': //手机号码
- return /^[|||||][-]{}$/.test(str);
- case 'tel': //座机
- return /^(\d{,}-\d{,})(-\d{,})?$/.test(str);
- case 'card': //身份证
- return /(^\d{}$)|(^\d{}$)|(^\d{}(\d|X|x)$)/.test(str);
- case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
- return /^[a-zA-Z]\w{,}$/.test(str)
- case 'postal': //邮政编码
- return /[-]\d{}(?!\d)/.test(str);
- case 'QQ': //QQ号
- return /^[-][-]{,}$/.test(str);
- case 'email': //邮箱
- return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
- case 'money': //金额(小数点2位)
- return /^\d*(?:\.\d{,})?$/.test(str);
- case 'URL': //网址
- return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
- case 'IP': //IP
- return /((?:(?:[-]|[-]\\d|[]?\\d?\\d)\\.){}(?:[-]|[-]\\d|[]?\\d?\\d))/.test(str);
- case 'date': //日期时间
- return /^(\d{})\-(\d{})\-(\d{}) (\d{})(?:\:\d{}|:(\d{}):(\d{}))$/.test(str) || /^(\d{})\-(\d{})\-(\d{})$/.test(str)
- case 'number': //数字
- return /^[-]$/.test(str);
- case 'english': //英文
- return /^[a-zA-Z]+$/.test(str);
- case 'chinese': //中文
- return /^[\u4E00-\u9FA5]+$/.test(str);
- case 'lower': //小写
- return /^[a-z]+$/.test(str);
- case 'upper': //大写
- return /^[A-Z]+$/.test(str);
- case 'HTML': //HTML标记
- return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
- default:
- return true;
- }
- }
- // 严格的身份证校验
- isCardID(sId) {
- if (!/(^\d{}$)|(^\d{}(\d|X|x)$)/.test(sId)) {
- alert('你输入的身份证长度或格式错误')
- return false
- }
- //身份证城市
- var aCity={:"北京",:"天津",:"河北",:"山西",:"内蒙古",:"辽宁",:"吉林",:"黑龙江",:"上海",:"江苏",:"浙江",:"安徽",:"福建",:"江西",:"山东",:"河南",:"湖北",:"湖南",:"广东",:"广西",:"海南",:"重庆",:"四川",:"贵州",:"云南",:"西藏",:"陕西",:"甘肃",:"青海",:"宁夏",:"新疆",:"台湾",:"香港",:"澳门",:"国外"};
- if(!aCity[parseInt(sId.substr(,))]) {
- alert('你的身份证地区非法')
- return false
- }
- // 出生日期验证
- var sBirthday=(sId.substr(,)+"-"+Number(sId.substr(,))+"-"+Number(sId.substr(,))).replace(/-/g,"/"),
- d = new Date(sBirthday)
- if(sBirthday != (d.getFullYear()+"/"+ (d.getMonth()+) + "/" + d.getDate())) {
- alert('身份证上的出生日期非法')
- return false
- }
- // 身份证号码校验
- var sum = ,
- weights = [, , , , , , , , , , , , , , , , ],
- codes = "10X98765432"
- for (var i = ; i < sId.length - ; i++) {
- sum += sId[i] * weights[i];
- }
- var last = codes[sum % ]; //计算出来的最后一位身份证号码
- if (sId[sId.length-] != last) {
- alert('你输入的身份证号非法')
- return false
- }
- return true
- }
- }
Array
- class ArrayFn {
- /*判断一个元素是否在数组中*/
- contains (arr, val) {
- return arr.indexOf(val) != - ? true : false;
- }
- /**
- * @param {arr} 数组
- * @param {fn} 回调函数
- * @return {undefined}
- */
- each (arr, fn) {
- fn = fn || Function;
- var a = [];
- var args = Array.prototype.slice.call(arguments, );
- for(var i = ; i < arr.length; i++) {
- var res = fn.apply(arr, [arr[i], i].concat(args));
- if(res != null) a.push(res);
- }
- }
- /**
- * @param {arr} 数组
- * @param {fn} 回调函数
- * @param {thisObj} this指向
- * @return {Array}
- */
- map (arr, fn, thisObj) {
- var scope = thisObj || window;
- var a = [];
- for(var i = , j = arr.length; i < j; ++i) {
- var res = fn.call(scope, arr[i], i, this);
- if(res != null) a.push(res);
- }
- return a;
- }
- /**
- * @param {arr} 数组
- * @param {type} 1:从小到大 2:从大到小 3:随机
- * @return {Array}
- */
- sort (arr, type = ) {
- return arr.sort( (a, b) => {
- switch(type) {
- case :
- return a - b;
- case :
- return b - a;
- case :
- return Math.random() - 0.5;
- default:
- return arr;
- }
- })
- }
- /*去重*/
- unique (arr) {
- if ( Array.hasOwnProperty('from') ) {
- return Array.from(new Set(arr));
- }else{
- var n = {},r=[];
- for(var i = ; i < arr.length; i++){
- if (!n[arr[i]]){
- n[arr[i]] = true;
- r.push(arr[i]);
- }
- }
- return r;
- }
- // 注:上面 else 里面的排重并不能区分 2 和 '2',但能减少用indexOf带来的性能
- /* 正确排重
- if ( Array.hasOwnProperty('from') ) {
- return Array.from(new Set(arr))
- }else{
- var r = [], NaNBol = true
- for(var i=0; i < arr.length; i++) {
- if (arr[i] !== arr[i]) {
- if (NaNBol && r.indexOf(arr[i]) === -1) {
- r.push(arr[i])
- NaNBol = false
- }
- }else{
- if(r.indexOf(arr[i]) === -1) r.push(arr[i])
- }
- }
- return r
- }
- */
- }
- /*求两个集合的并集*/
- union (a, b) {
- var newArr = a.concat(b);
- return this.unique(newArr);
- }
- /*求两个集合的交集*/
- intersect (a, b) {
- var _this = this;
- a = this.unique(a);
- return this.map(a, function(o) {
- return _this.contains(b, o) ? o : null;
- });
- }
- /*删除其中一个元素*/
- remove (arr, ele) {
- var index = arr.indexOf(ele);
- if(index > -) {
- arr.splice(index, );
- }
- return arr;
- }
- /*将类数组转换为数组的方法*/
- formArray (ary) {
- var arr = [];
- if(Array.isArray(ary)) {
- arr = ary;
- } else {
- arr = Array.prototype.slice.call(ary);
- };
- return arr;
- }
- /*最大值*/
- max (arr) {
- return Math.max.apply(null, arr);
- }
- /*最小值*/
- min (arr) {
- return Math.min.apply(null, arr);
- }
- /*求和*/
- sum (arr) {
- return arr.reduce( (pre, cur) => {
- return pre + cur
- })
- }
- /*平均值*/
- average (arr) {
- return this.sum(arr)/arr.length
- }
- }
Dom
- class DomFn {
- $ (selector){
- var type = selector.substring(, );
- if (type === '#') {
- if (document.querySelecotor) return document.querySelector(selector)
- return document.getElementById(selector.substring())
- }else if (type === '.') {
- if (document.querySelecotorAll) return document.querySelectorAll(selector)
- return document.getElementsByClassName(selector.substring())
- }else{
- return document['querySelectorAll' ? 'querySelectorAll':'getElementsByTagName'](selector)
- }
- }
- /*检测类名*/
- hasClass (ele, name) {
- return ele.className.match(new RegExp('(\\s|^)' + name + '(\\s|$)'));
- }
- /*添加类名*/
- addClass (ele, name) {
- if (!this.hasClass(ele, name)) ele.className += " " + name;
- }
- /*删除类名*/
- removeClass (ele, name) {
- if (this.hasClass(ele, name)) {
- var reg = new RegExp('(\\s|^)' + name + '(\\s|$)');
- ele.className = ele.className.replace(reg, '');
- }
- }
- /*替换类名*/
- replaceClass (ele, newName, oldName) {
- this.removeClass(ele, oldName);
- this.addClass(ele, newName);
- }
- /*获取兄弟节点*/
- siblings (ele) {
- console.log(ele.parentNode)
- var chid = ele.parentNode.children,eleMatch = [];
- for(var i = , len = chid.length; i < len; i ++){
- if(chid[i] != ele){
- eleMatch.push(chid[i]);
- }
- }
- return eleMatch;
- }
- /*获取行间样式属性*/
- getByStyle (obj,name){
- if(obj.currentStyle){
- return obj.currentStyle[name];
- }else{
- return getComputedStyle(obj,false)[name];
- }
- }
- }
Http
- /*
- let url = 'http://demo.com/api'
- 例:
- ajax({
- url: url,
- success: function(data) {
- }
- })
- */
- function ajax(setting){
- //设置参数的初始值
- var opts={
- method: (setting.method || "GET").toUpperCase(), //请求方式
- url: setting.url || "", // 请求地址
- async: setting.async || true, // 是否异步
- dataType: setting.dataType || "json", // 解析方式
- data: setting.data || "", // 参数
- success: setting.success || function(){}, // 请求成功回调
- error: setting.error || function(){} // 请求失败回调
- }
- // 参数格式化
- function params_format (obj) {
- var str = ''
- for (var i in obj) {
- str += i + '=' + obj[i] + '&'
- }
- return str.split('').slice(, -).join('')
- }
- // 创建ajax对象
- var xhr=new XMLHttpRequest();
- // 连接服务器open(方法GET/POST,请求地址, 异步传输)
- if(opts.method == 'GET'){
- xhr.open(opts.method, opts.url + "?" + params_format(opts.data), opts.async);
- xhr.send();
- }else{
- xhr.open(opts.method, opts.url, opts.async);
- xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
- xhr.send(opts.data);
- }
- /*
- ** 每当readyState改变时,就会触发onreadystatechange事件
- ** readyState属性存储有XMLHttpRequest的状态信息
- ** 0 :请求未初始化
- ** 1 :服务器连接已建立
- ** 2 :请求已接受
- ** 3 : 请求处理中
- ** 4 :请求已完成,且相应就绪
- */
- xhr.onreadystatechange = function() {
- if (xhr.readyState === && (xhr.status === || xhr.status === )) {
- switch(opts.dataType){
- case "json":
- var json = JSON.parse(xhr.responseText);
- opts.success(json);
- break;
- case "xml":
- opts.success(xhr.responseXML);
- break;
- default:
- opts.success(xhr.responseText);
- break;
- }
- }
- }
- xhr.onerror = function(err) {
- opts.error(err);
- }
- }
- /*
- let url = 'http://demo.com/api'
- 例:
- fetchHttp(url).
- then( res => {
- console.log(res)
- }).catch( e => {
- console.log(e)
- })
- fetchHttp(url, {
- method: 'POST',
- })
- */
- function fetchHttp(url, setting = {}) {
- //设置参数的初始值
- let opts={
- method: (setting.method || 'GET').toUpperCase(), //请求方式
- headers : setting.headers || {}, // 请求头设置
- credentials : setting.credentials || true, // 设置cookie是否一起发送
- body: setting.body || {},
- mode : setting.mode || 'cors', // 可以设置 cors, no-cors, same-origin
- redirect : setting.redirect || 'follow', // follow, error, manual
- cache : setting.cache || 'default' // 设置 cache 模式 (default, reload, no-cache)
- }
- let dataType = setting.dataType || "json", // 解析方式
- data = setting.data || "" // 参数
- // 参数格式化
- function params_format (obj) {
- var str = ''
- for (var i in obj) {
- str += `${i}=${obj[i]}&`
- }
- return str.split('').slice(, -).join('')
- }
- if (opts.method === 'GET') {
- url = url + (data?`?${params_format(data)}`:'')
- }else{
- setting.body = data || {}
- }
- return new Promise( (resolve, reject) => {
- fetch(url, opts).then( async res => {
- let data = dataType === 'text' ? await res.text() :
- dataType === 'blob' ? await res.blob() : await res.json()
- resolve(data)
- }).catch( e => {
- reject(e)
- })
- })
- }
Number
- class NumberFn {
- /*随机数范围*/
- random (min, max) {
- if (arguments.length === ) {
- return Math.floor(min + Math.random() * ( (max+) - min ))
- }else{
- return null;
- }
- }
- /*将阿拉伯数字翻译成中文的大写数字*/
- numberToChinese (num) {
- var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十");
- var BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
- var a = ("" + num).replace(/(^*)/g, "").split("."),
- k = ,
- re = "";
- for(var i = a[].length - ; i >= ; i--) {
- switch(k) {
- case :
- re = BB[] + re;
- break;
- case :
- if(!new RegExp("0{4}//d{" + (a[].length - i - ) + "}$")
- .test(a[]))
- re = BB[] + re;
- break;
- case :
- re = BB[] + re;
- BB[] = BB[];
- k = ;
- break;
- }
- if(k % == && a[].charAt(i + ) != && a[].charAt(i + ) == )
- re = AA[] + re;
- if(a[].charAt(i) != )
- re = AA[a[].charAt(i)] + BB[k % ] + re;
- k++;
- }
- if(a.length > ) // 加上小数部分(如果有小数部分)
- {
- re += BB[];
- for(var i = ; i < a[].length; i++)
- re += AA[a[].charAt(i)];
- }
- if(re == '一十')
- re = "十";
- if(re.match(/^一/) && re.length == )
- re = re.replace("一", "");
- return re;
- }
- /*将数字转换为大写金额*/
- changeToChinese (Num) {
- //判断如果传递进来的不是字符的话转换为字符
- if(typeof Num == "number") {
- Num = new String(Num);
- };
- Num = Num.replace(/,/g, "") //替换tomoney()中的“,”
- Num = Num.replace(/ /g, "") //替换tomoney()中的空格
- Num = Num.replace(/¥/g, "") //替换掉可能出现的¥字符
- if(isNaN(Num)) { //验证输入的字符是否为数字
- //alert("请检查小写金额是否正确");
- return "";
- };
- //字符处理完毕后开始转换,采用前后两部分分别转换
- var part = String(Num).split(".");
- var newchar = "";
- //小数点前进行转化
- for(var i = part[].length - ; i >= ; i--) {
- if(part[].length > ) {
- return "";
- //若数量超过拾亿单位,提示
- }
- var tmpnewchar = ""
- var perchar = part[].charAt(i);
- switch(perchar) {
- case "":
- tmpnewchar = "零" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "壹" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "贰" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "叁" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "肆" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "伍" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "陆" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "柒" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "捌" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "玖" + tmpnewchar;
- break;
- }
- switch(part[].length - i - ) {
- case :
- tmpnewchar = tmpnewchar + "元";
- break;
- case :
- if(perchar != ) tmpnewchar = tmpnewchar + "拾";
- break;
- case :
- if(perchar != ) tmpnewchar = tmpnewchar + "佰";
- break;
- case :
- if(perchar != ) tmpnewchar = tmpnewchar + "仟";
- break;
- case :
- tmpnewchar = tmpnewchar + "万";
- break;
- case :
- if(perchar != ) tmpnewchar = tmpnewchar + "拾";
- break;
- case :
- if(perchar != ) tmpnewchar = tmpnewchar + "佰";
- break;
- case :
- if(perchar != ) tmpnewchar = tmpnewchar + "仟";
- break;
- case :
- tmpnewchar = tmpnewchar + "亿";
- break;
- case :
- tmpnewchar = tmpnewchar + "拾";
- break;
- }
- var newchar = tmpnewchar + newchar;
- }
- //小数点之后进行转化
- if(Num.indexOf(".") != -) {
- if(part[].length > ) {
- // alert("小数点之后只能保留两位,系统将自动截断");
- part[] = part[].substr(, )
- }
- for(i = ; i < part[].length; i++) {
- tmpnewchar = ""
- perchar = part[].charAt(i)
- switch(perchar) {
- case "":
- tmpnewchar = "零" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "壹" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "贰" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "叁" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "肆" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "伍" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "陆" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "柒" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "捌" + tmpnewchar;
- break;
- case "":
- tmpnewchar = "玖" + tmpnewchar;
- break;
- }
- if(i == ) tmpnewchar = tmpnewchar + "角";
- if(i == ) tmpnewchar = tmpnewchar + "分";
- newchar = newchar + tmpnewchar;
- }
- }
- //替换所有无用汉字
- while(newchar.search("零零") != -)
- newchar = newchar.replace("零零", "零");
- newchar = newchar.replace("零亿", "亿");
- newchar = newchar.replace("亿万", "亿");
- newchar = newchar.replace("零万", "万");
- newchar = newchar.replace("零元", "元");
- newchar = newchar.replace("零角", "");
- newchar = newchar.replace("零分", "");
- if(newchar.charAt(newchar.length - ) == "元") {
- newchar = newchar + "整"
- }
- return newchar;
- }
- }
String
- class StringFn {
- /**
- * 去除空格
- * @param {str}
- * @param {type}
- * type: 1-所有空格 2-前后空格 3-前空格 4-后空格
- * @return {String}
- */
- trim (str, type) {
- type = type ||
- switch (type) {
- case :
- return str.replace(/\s+/g, "");
- case :
- return str.replace(/(^\s*)|(\s*$)/g, "");
- case :
- return str.replace(/(^\s*)/g, "");
- case :
- return str.replace(/(\s*$)/g, "");
- default:
- return str;
- }
- }
- /**
- * @param {str}
- * @param {type}
- * type: 1:首字母大写 2:首页母小写 3:大小写转换 4:全部大写 5:全部小写
- * @return {String}
- */
- changeCase (str, type) {
- type = type ||
- switch (type) {
- case :
- return str.replace(/\b\w+\b/g, function (word) {
- return word.substring(, ).toUpperCase() + word.substring().toLowerCase();
- });
- case :
- return str.replace(/\b\w+\b/g, function (word) {
- return word.substring(, ).toLowerCase() + word.substring().toUpperCase();
- });
- case :
- return str.split('').map( function(word){
- if (/[a-z]/.test(word)) {
- return word.toUpperCase();
- }else{
- return word.toLowerCase()
- }
- }).join('')
- case :
- return str.toUpperCase();
- case :
- return str.toLowerCase();
- default:
- return str;
- }
- }
- /*
- 检测密码强度
- */
- checkPwd (str) {
- var Lv = ;
- if (str.length < ) {
- return Lv
- }
- if (/[-]/.test(str)) {
- Lv++
- }
- if (/[a-z]/.test(str)) {
- Lv++
- }
- if (/[A-Z]/.test(str)) {
- Lv++
- }
- if (/[\.|-|_]/.test(str)) {
- Lv++
- }
- return Lv;
- }
- /*过滤html代码(把<>转换)*/
- filterTag (str) {
- str = str.replace(/&/ig, "&");
- str = str.replace(/</ig, "<");
- str = str.replace(/>/ig, ">");
- str = str.replace(" ", " ");
- return str;
- }
- }
Storage、cookie
- class StorageFn {
- constructor () {
- this.ls = window.localStorage;
- this.ss = window.sessionStorage;
- }
- /*-----------------cookie---------------------*/
- /*设置cookie*/
- setCookie (name, value, day) {
- var setting = arguments[];
- if (Object.prototype.toString.call(setting).slice(, -) === 'Object'){
- for (var i in setting) {
- var oDate = new Date();
- oDate.setDate(oDate.getDate() + day);
- document.cookie = i + '=' + setting[i] + ';expires=' + oDate;
- }
- }else{
- var oDate = new Date();
- oDate.setDate(oDate.getDate() + day);
- document.cookie = name + '=' + value + ';expires=' + oDate;
- }
- }
- /*获取cookie*/
- getCookie (name) {
- var arr = document.cookie.split('; ');
- for (var i = ; i < arr.length; i++) {
- var arr2 = arr[i].split('=');
- if (arr2[] == name) {
- return arr2[];
- }
- }
- return '';
- }
- /*删除cookie*/
- removeCookie (name) {
- this.setCookie(name, , -);
- }
- /*-----------------localStorage---------------------*/
- /*设置localStorage*/
- setLocal(key, val) {
- var setting = arguments[];
- if (Object.prototype.toString.call(setting).slice(, -) === 'Object'){
- for(var i in setting){
- this.ls.setItem(i, JSON.stringify(setting[i]))
- }
- }else{
- this.ls.setItem(key, JSON.stringify(val))
- }
- }
- /*获取localStorage*/
- getLocal(key) {
- if (key) return JSON.parse(this.ls.getItem(key))
- return null;
- }
- /*移除localStorage*/
- removeLocal(key) {
- this.ls.removeItem(key)
- }
- /*移除所有localStorage*/
- clearLocal() {
- this.ls.clear()
- }
- /*-----------------sessionStorage---------------------*/
- /*设置sessionStorage*/
- setSession(key, val) {
- var setting = arguments[];
- if (Object.prototype.toString.call(setting).slice(, -) === 'Object'){
- for(var i in setting){
- this.ss.setItem(i, JSON.stringify(setting[i]))
- }
- }else{
- this.ss.setItem(key, JSON.stringify(val))
- }
- }
- /*获取sessionStorage*/
- getSession(key) {
- if (key) return JSON.parse(this.ss.getItem(key))
- return null;
- }
- /*移除sessionStorage*/
- removeSession(key) {
- this.ss.removeItem(key)
- }
- /*移除所有sessionStorage*/
- clearSession() {
- this.ss.clear()
- }
- }
Others
- class OtherFn {
- /**
- * [deepClone 深度克隆]
- * @param {[type]} obj [克隆对象]
- * @return {[type]} [返回深度克隆后的对象]
- */
- deepClone (obj) {
- if (obj === null || typeof obj !== 'object') return obj
- var isType = function(obj, type) {
- var flag,
- typeString = Object.prototype.toString.call(obj)
- switch(type) {
- case 'Array':
- flag = typeString === '[object Array]'
- break
- case 'Date':
- flag = typeString === '[object Date]'
- break
- case 'RegExp':
- flag = typeString === '[object RegExp]'
- break
- default:
- flag = false
- }
- return flag
- }
- var getRegExp = function(re) {
- var flags = ''
- if (re.global) flags += 'g'
- if (re.ignoreCase) flags += 'i'
- if (re.multiline) flags += 'm'
- return flags
- }
- var _clone = function(parent) {
- var child, proto, parents = [], children = []
- if (isType(parent, 'Array')) {// 对数组做特殊处理
- child = [];
- } else if (isType(parent, 'RegExp')) {// 对正则做特殊处理
- child = new RegExp(parent.source, getRegExp(parent));
- if (parent.lastIndex) child.lastIndex = parent.lastIndex;
- } else if (isType(parent, 'Date')) {// 对Date做特殊处理
- child = new Date(parent.getTime());
- } else {
- // 处理对象原型
- proto = Object.getPrototypeOf(parent);
- // 利用Object.create切断原型链
- child = Object.create(proto);
- }
- // 处理循环引用
- var index = parents.indexOf(parent);
- if (index != -) {
- // 如果父数组存在本对象,说明之前已经被引用过,直接返回此对象
- return children[index];
- }
- parents.push(parent);
- children.push(child);
- for (var i in parent) {
- child[i] = _clone(parent[i]);
- }
- return child;
- }
- return _clone(obj)
- }
- /*获取网址参数*/
- getUrlParams(name){
- var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
- var r = decodeURI(window.location.search).substr().match(reg);
- if(r!=null) return r[]; return null;
- }
- /*获取全部url参数,并转换成json对象*/
- getUrlAllParams (url) {
- var url = url ? url : window.location.href;
- var _pa = url.substring(url.indexOf('?') + ),
- _arrS = _pa.split('&'),
- _rs = {};
- for (var i = , _len = _arrS.length; i < _len; i++) {
- var pos = _arrS[i].indexOf('=');
- if (pos == -) {
- continue;
- }
- var name = _arrS[i].substring(, pos),
- value = window.decodeURIComponent(_arrS[i].substring(pos + ));
- _rs[name] = value;
- }
- return _rs;
- }
- /*删除url指定参数,返回url*/
- delParamsUrl(url, name){
- var baseUrl = url.split('?')[] + '?';
- var query = url.split('?')[];
- if (query.indexOf(name)>-) {
- var obj = {}
- var arr = query.split("&");
- for (var i = ; i < arr.length; i++) {
- arr[i] = arr[i].split("=");
- obj[arr[i][]] = arr[i][];
- };
- delete obj[name];
- var url = baseUrl + JSON.stringify(obj).replace(/[\"\{\}]/g,"").replace(/\:/g,"=").replace(/\,/g,"&");
- return url
- }else{
- return url;
- }
- }
- /*获取十六进制随机颜色*/
- getRandomColor () {
- return '#' + (function(h) {
- return new Array( - h.length).join("") + h;
- })((Math.random() * 0x1000000 << ).toString());
- }
- /*图片加载*/
- imgLoadAll(arr,callback){
- var arrImg = [];
- for (var i = ; i < arr.length; i++) {
- var img = new Image();
- img.src = arr[i];
- img.onload = function(){
- arrImg.push(this);
- if (arrImg.length == arr.length) {
- callback && callback();
- }
- }
- }
- }
- /*音频加载*/
- loadAudio(src, callback) {
- var audio = new Audio(src);
- audio.onloadedmetadata = callback;
- audio.src = src;
- }
- /*DOM转字符串*/
- domToStirng(htmlDOM){
- var div= document.createElement("div");
- div.appendChild(htmlDOM);
- return div.innerHTML
- }
- /*字符串转DOM*/
- stringToDom(htmlString){
- var div= document.createElement("div");
- div.innerHTML=htmlString;
- return div.children[];
- }
- /**
- * 光标所在位置插入字符,并设置光标位置
- *
- * @param {dom} 输入框
- * @param {val} 插入的值
- * @param {posLen} 光标位置处在 插入的值的哪个位置
- */
- setCursorPosition (dom,val,posLen) {
- var cursorPosition = ;
- if(dom.selectionStart){
- cursorPosition = dom.selectionStart;
- }
- this.insertAtCursor(dom,val);
- dom.focus();
- console.log(posLen)
- dom.setSelectionRange(dom.value.length,cursorPosition + (posLen || val.length));
- }
- /*光标所在位置插入字符*/
- insertAtCursor(dom, val) {
- if (document.selection){
- dom.focus();
- sel = document.selection.createRange();
- sel.text = val;
- sel.select();
- }else if (dom.selectionStart || dom.selectionStart == ''){
- let startPos = dom.selectionStart;
- let endPos = dom.selectionEnd;
- let restoreTop = dom.scrollTop;
- dom.value = dom.value.substring(, startPos) + val + dom.value.substring(endPos, dom.value.length);
- if (restoreTop > ){
- dom.scrollTop = restoreTop;
- }
- dom.focus();
- dom.selectionStart = startPos + val.length;
- dom.selectionEnd = startPos + val.length;
- } else {
- dom.value += val;
- dom.focus();
- }
- }
- }
Javascript总结(全)的更多相关文章
- 表单javascript checkbox全选 反选 全不选
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JavaScript 实现全选 / 反选功能
JavaScript 实现全选 / 反选功能 版权声明:未经授权,内容严禁转载! 构建主体界面 编写 HTML 代码 和 CSS 代码,设计主题界面 <style> #user { wid ...
- JavaScript最全编码规范
转载: JavaScript最全编码规范 类型 ●基本类型:访问基本类型时,应该直接操作类型值 ●string ●number ●boolean ●null ●undefined var foo = ...
- Javascript实现全选按钮
Javascript实现全选按钮 效果:有全选选项框和单个选项框,选择全选框,所有的的选择都打上的钩,取消全选钩所有的都去掉了钩,如果取消其中某一个的钩,那么全选的钩也取消,反之全选所有的选项,那么全 ...
- JavaScript、全选反选-课堂笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 转发!HTML 复选框 checkbox 的 JavaScript 的全选和全反选
checkbox 或者按钮实现 form 内的 checkbox 全选或者反选,代码很简单,全部代码如下: <html> <head> <meta http-equiv= ...
- jQuery/javascript实现全选全不选
<html> <head> <meta charset="utf-8"> <title>Checkbox的练习</title& ...
- 用javascript实现全选/反选组件
以下是本人制作的全选/反选 组件,供广大同行参考.指正: 效果如图: 在实现的过程中,全选和全部取消选中这两个功能较为简单,只需用for循环遍历所有复选框为true或false即可.反选也较为简单,也 ...
- javascript无缝全屏轮播
虽然平时能利用插件来实现,但是总是觉得,如果连个无缝轮播都写不出来,还玩个毛线: 其实现在还真的是玩毛线,因为代码都是别人的,不过嘛,很快就变成是我的啦! 代码还没封装成插件,其实我也还没弄清楚. 下 ...
- JavaScript 实时 全角转半角
//JavaScript全角字符转半角(参数str为input框输入的内容)var $fullChar2halfChar = function(str) { var result = ''; for ...
随机推荐
- ELK学习笔记之Kibana查询和使用说明
0x00 概述 elasticsearch构建在Lucene之上,过滤器语法和Lucene相同 Kibana接口概述 Kibana接口分为四个主要部分: 发现 可视化 仪表板 设置 我们将按照列出的顺 ...
- Delphi中HInstance
通过测试看出:HInstance.Application.Handle.Self.Handle不是一回事. Self.Handle是窗体句柄: Application.Handle也是个窗体的句柄,不 ...
- C# yield checked,unchecked lock语句(C#学习笔记04)
特殊语句 yield语句 yield用于终止迭代 只能使用在返回类型必须为 IEnumerable.IEnumerable<T>.IEnumerator 或 IEnumerator< ...
- 测试欧气的小游戏-java
Java 用我们学到的知识做处一个小的项目或者游戏等等应该都或多或少的有一点点的成就感吧,下列就是我用所学的基础知识做的猜字谜游戏,并且给他赋予了灵魂哈哈哈.有兴趣的可以尝试的用自己会的知识做一些小的 ...
- django子应用
在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该 ...
- 腕表wacche英语wacche手表
watch As a noun, from Middle English wacche, Etymology As a noun, from Middle English wacche,See bel ...
- Shell 冒泡排序
举例 #!/bin/bash echo "please input a number list:" read -a arrs for((i=0;i<${#arrs[@]};i ...
- linux基础命令学习
一 su命令 1. [yunwei@elymedia ~]$ yunwei 表示当前用户名 @elymedia 表示主机名 - 表示当前路径,涉及到当前用户的主目录(家目录) $ 表示普通用 ...
- U盘出现.exe问题的解决方案
这代表U盘中了AutoRun病毒,原文件并未被删除,只是被设置为隐藏了. 所以切勿直接格式化U盘! 解决方案:分别创建文件1.reg和2.bat: 1.reg Windows Registry Edi ...
- 常用Windows命令、常用 Cmd命令(补充)
常用的Windows 命令使用能够提升工作效率以及快捷处理事项. 下面为平时常用的Windows 命令/cmd 命令. 一.以下命令无需打开cmd 窗口即可操作(输入完毕 打个 回车,即可执行). 1 ...