• 0
  • 0

JS自定义函数库

2019-10-28 815 0 admin 所属分类:Javascript

判断元素是否在数组中

/**
 * value 元素值
 * data 数组 支持数组是json对象
 * key 如果数组是json对象 设定对比的字段
 */
function in_array(value, data, key = null) {
    for (var i = 0; i < data.length; i++) {
        var cur_value = key == null ? data[i] : data[i][key];
        if (value == cur_value) {
            return true;
        }
    }
    return false;
}

判断变量是否为数组

function is_array(data) {
    return data instanceof Array;
}

判断是否为函数

function isFun(funcName) {
    try {
        if (typeof(eval(funcName)) == "function") {
            return true;
        }
    } catch (e) {
        return false;
    }
    return false;
}

动态添加JS script脚本

function addScript(url) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

请求地址是否为直链视频地址

function isMovie(str) {
    if (str.indexOf('.mp4') != -1 || str.indexOf('.flv') != -1 || str.indexOf('.avi') != -1 || str.indexOf('.mov') != -1 || str.indexOf('.rmvb') != -1 || str.indexOf('.rm') != -1 || str.indexOf('.3gp') != -1) {
        if (str.indexOf('<a') != -1) {
            return true;
        }
    }
    return false;
}

js cookie 操作函数

/* 
    设置cookie
    name cookie 名
    value cookie 值
    expires cookie 有效期 单位秒
*/
function setCookie(name, value, expires) {
    if (!name || !value) return;
    var Days = 30; //默认30天
    var exp = new Date();
    if (!expires) {
        expires = Days * 24 * 60 * 60 * 1000;
    } else {
        expires = expires * 1000
    }
    exp.setTime(exp.getTime() + expires);
    document.cookie = name + "=" + encodeURIComponent(value) + ";expires=" + exp.toUTCString();
}

//获取cookie
function getCookie(name) {
    var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)"));
    if (arr != null) return decodeURIComponent(arr[2]);
    return null;
}

//删除cookie
function delCookie(name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = getCookie(name);
    if (!cval) document.cookie = name + "=" + cval + ";expires=" + exp.toUTCString();
}

网页端缓存处理

// 获取 sessionStorage 中的播放列表
function getStorage(key) {
    if (!window.sessionStorage) {
        return false;
    }
    return sessionStorage.getItem(key);
}

// 设置 sessionStorage
function setStorage(key, val) {
    if (!window.sessionStorage) {
        return false;
    }
    if (isArrayFn(val) && val.length > 200) {
        val.length = 200
    }
    if (typeof val != 'string') {
        val = JSON.stringify(val)
    }
    sessionStorage.setItem(key, val);
}
// 删除
function removeStorage(key) {
   if (!window.sessionStorage) {
      return false;
   }
   sessionStorage.removeItem(key);
}


//清除
function removeAllStorage(key) {
   if (!window.sessionStorage) {
        return false;
   }
   sessionStorage.clear();
}


判断是否为数组

// 判断value是否为数组
function isArrayFn(value) {
    if (typeof Array.isArray === "function") {
        return Array.isArray(value);
    } else {
        return Object.prototype.toString.call(value) === "[object Array]";
    }
}

JS过滤不安全字符

function escapeHtml(unsafe) {
    return unsafe.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
}

将目标文本从数组中删除

function mysplice(data, childrendata) {
    for (var i = 0; i < data.length; i++) {
        if (data[i] == childrendata) {
            data.splice(i, 1);
            break;
        }
    }
}

从一段文本中区分添加的新图片和 删除的老图片 分别存入到第三和第四个参数

function analyze_old_new_images(oldcontent,newcontent,addarr,removearr) {
	var oldimages = [];
	var newimages = [];
	if (oldcontent) {
		var rs = oldcontent.match(/<img[\s\S]+?>/gi);
		if (rs==null) {
			rs = [];
		}
		for (var i = 0; i < rs.length; i++) {
			var json = parseTagAttr(rs[i]);
			if (json['src'].indexOf('data:')==0 && json['alt']) {
				// 新增的 base64图片
				oldimages.push(json['alt']);
			} else if (json['src']) {
				oldimages.push(json['src']);
			}
		}
	}

	if (newcontent) {
		var rs = newcontent.match(/<img[\s\S]+?>/gi);
		if (rs==null) {
			rs = [];
		}
		for (var i = 0; i < rs.length; i++) {
			var json = parseTagAttr(rs[i]);
			if (json['src'].indexOf('data:')==0 && json['alt']) {
				// 新增的 base64图片
				newimages.push(json['alt']);
			} else if (json['src']) {
				newimages.push(json['src']);
			}
		}
	}

	var arr_inter = array_intersection(oldimages,newimages);
	// 取交叉部分 插入 addarr
	for (var i =0 ;i<arr_inter.length;i++) {
		addarr.push(arr_inter[i]);
	}
	
	var arr_diff = array_diff(oldimages,newimages);
	// 取old删除部分 插入 removearr
	for (var i =0 ;i<arr_diff.length;i++) {
		removearr.push(arr_diff[i]);
	}

	var arr_diff2 = array_diff(newimages,oldimages);
	// 取old删除部分 插入 removearr
	for (var i =0 ;i<arr_diff2.length;i++) {
		addarr.push(arr_diff2[i]);
	}

}

解析文档属性值 以键值对存储在json对象中

function parseTagAttr(tag) {
    // 筛选出属性
    var rs = tag.match(/ (.+?)=[\'|\"]([\s\S]+?)[\'|\"]/gi);
    var json = {};
    for (var i = 0; i < rs.length; i++) {
        if (rs[i].indexOf('<') != -1 || rs[i].indexOf('>') != -1) {
            continue;
        }
        // 首尾去空
        rs[i] = rs[i].replace(/^\s+|\s+$/g, '');
        splitdata = rs[i].split("=");
        if (splitdata.length > 2) {
            for (var k = 2; k < splitdata.length; k++) {
                splitdata[1] = splitdata[1] + '=' + splitdata[k];
            }
        }
        json[splitdata[0]] = splitdata[1].replace(/[\"\']/gi, "");
    }
    return json;
}

交叉并补集合实现

// 数组取交集 没有交集返回空数组
function array_intersection(arr1, arr2) {
    return arr1.filter(function(val) {
        return arr2.indexOf(val) > -1
    })
}
// 数组取并集
function array_union(arr1, arr2) {
    return arr1.concat(arr2.filter(function(val) {
        return !(arr1.indexOf(val) > -1)
    }));
}
// 数组取补集  两个数组各自没有的集合
function array_complement(arr1, arr2) {
    return arr1.filter(function(val) {
        return !(arr2.indexOf(val) > -1)
    }).concat(arr2.filter(function(val) {
        return !(arr1.indexOf(val) > -1)
    }));
}
// 差集 数组arr1相对于arr2所没有的
function array_diff(arr1, arr2) {
    return arr1.filter(function(val) {
        return arr2.indexOf(val) === -1
    });
}


返回顶部