判断元素是否在数组中
/**
* 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
});
}