zoomla
Version:
16年专业研发|中文alexa排名第一的CMS品牌-基于dotNET core、功能强大,集成站群、微信开发、小程序与ERP及OA办公系统,支持国际语言和多民族语言,世界五百强与大型门户专用高端网站内核CMS系统
320 lines (319 loc) • 11.6 kB
JavaScript
/*提供对Array的原型扩展*/
//--------------------------------------------------------------
//用于Angular
var ArrCOM = {};
ArrCOM.GetByID = function (arr, id, name) {
if (!name) { name = "id"; }
if (!id || id == NaN || id == null || id == undefined) { console.log(id, "值为空"); return null; }
id = (id + "").replace(/ /ig, "");
for (var i = 0; i < arr.length; i++) {
if (arr[i][name] == id) { return arr[i]; }
}
return null;
}
ArrCOM.RemoveByID = function (arr, id, name) {
if (!name) { name = "id"; }
if (!id || id == NaN || id == null || id == undefined) { console.log(id, "值为空"); return null; }
id = (id + "").replace(/ /ig, "");
for (var i = 0; i < arr.length; i++) {
if (arr[i][name] == id) { arr.splice(i, 1); break; }
}
}
// var tar = ArrCOM.GetNear($scope.qlist, { "dir": dir, order: item.OrderID, field: "OrderID" });
ArrCOM.GetNear = function (arr, cfg) {
//var opts = {arr:操作的数组,order:当前order,dir:方向,field:排序字段名};
var result = null;
var order = cfg.order;
var dir = cfg.dir;
if (arr.length < 2) { return result; }
switch (dir) {
case "pre":
for (var i = 0; i < arr.length; i++) {
var cur = parseInt(arr[i][cfg.field]);//当前要对比的order
if (cur < order && (!result || cur > result[cfg.field])) {
result = arr[i];
}
}
break;
case "next":
for (var i = 0; i < arr.length; i++) {
var cur = parseInt(arr[i][cfg.field]);//当前要对比的order
if (cur > order && (!result || cur < result[cfg.field])) {
result = arr[i];
}
}
break;
default:
console.log("getnear:" + dir + "错误");
break;
}
return result;
}
//合并两个数组(主键相同的忽略)
ArrCOM.merge = function (arr1, arr2, pk) {
if (!arr2 || arr2.length < 1) { return arr1; }
if (!arr1 || arr1.length < 1) { arr1 = arr2; return arr1; }
if (!pk) { pk = "id"; }
//------------------------------------------------------
for (var i = 0; i < arr2.length; i++) {
var isExist = false;
arr1.forEach(function (item, array, index) {
if (arr2[i][pk] == item[pk]) { isExist = true; }
});
if (isExist == false) { arr1.push(arr2[i]); }
}
return arr1;
}
//用于字符串
var idshelp = {};
idshelp.add = function (ids, id) {
var ref = this;
if (!ids) { ids = ""; }
if (ref.isempty(id) || ids.indexOf("," + id + ",") >= 0) { return ids; }
else{
ids += "," + id + ",";
return ref.format(ids);
}
}
idshelp.del = function (ids, id) {
var ref = this;
if (!ids) { ids = ""; } else { ids = "," + ids + ","; }
//var re = new RegExp("," + id + ",", "gim"); // re为/^\d+bl$/gim
while (ids.indexOf("," + id + ",") > -1) {
ids = ids.replace("," + id + ",", ",");
}
return ref.format(ids);
}
//去除,,|如果仅有逗号则返回空
idshelp.format = function (ids) {
var ref = this;
if (ref.isempty(ids)) { return ""; }
ids = ids.replace(/ /g, "");
while (ids.indexOf(",,") > -1) {
ids = ids.replace(/,,/g, ",");
}
return ids;
}
//将两个ids合并,并自动去除重复
idshelp.merge = function (ids1, ids2) {
var result = "";
if (!ids1) { ids1 = ""; } if (!ids2) { ids2 = ""; }
if (ids1 == "" || ids2 == "") { return idshelp.format(ids1 + ids2); }
//--------正常处理
result = ids1; ids1 = "," + ids1 + ",";
var arr = ids2.split(',');
for (var i = 0; i < arr.length; i++) {
if (ids1.indexOf("," + arr[i] + ",") > -1) { continue; }
result += "," + arr[i];
}
return result;
}
//为空返回true
idshelp.isempty = function () {
for (var i = 0; i < arguments.length; i++) {
if (!arguments[i] || arguments[i] == undefined || !arguments[i].replace) { return true; }//传入为undefined也为false
var s = arguments[i].replace(/ /g, "").replace(/,/g, "");
if (s == "") return true;
}
return false;
}
//将数组合并,如果主键重复则不添加
Array.prototype.addAll = function ($array, name) {
if ($array == null || $array.length == 0) { return; }
for (var $i = 0; $i < $array.length; $i++) {
this.pushNoDup($array[$i], name);
}
}
/*
*添加前进行重复检测,如指定的主键项不存在,也不允许添加
*示例:list.pushNoDup({ p_id: 1, p_title: "test" }, "p_id");
*/
Array.prototype.pushNoDup = function (model, name) {
if (!name) { name = "id"; }
var isAdd = true;
for (var i = 0; i < this.length; i++) {
var me = this[i];
if (me[name] == model[name]) { isAdd = false; break; }
}
if (isAdd) { this.push(model); }
}
//向开头添加一个元素,如重复则不添加
Array.prototype.unshiftNoDup = function (model, name) {
if (!name) { name = "id"; }
var isAdd = true;
for (var i = 0; i < this.length; i++) {
var me = this[i];
if (me[name] == model[name]) { isAdd = false; break; }
}
if (isAdd) { this.unshift(model); }
}
//是否包含指定值
Array.prototype.contains = function ($value) {
for (var $i = 0; $i < this.length; $i++) {
var $element = this[$i];
if ($element == $value)
return true;
}
return false;
}
Array.prototype.GetByID = function (id, name) {
return ArrCOM.GetByID(this, id, name);
}
//返回数组中指定字段值最大的一个元素(用于order排序等)
Array.prototype.GetByMax = function (name) {
if (this.length < 1) { return null; }
var model = this[0];
for (var i = 1; i < this.length; i++) {
var $element = this[i];
if ($element[name] > model[name]) { model = $element; }
}
return model;
}
//根据ID,更新数组中的指定元素
Array.prototype.UpdateByID = function (model, name) {
if (!name) { name = "id"; }
var id = model[name];
if (!id || id == NaN || id == null || id == undefined) { console.log(id, "值为空"); return null; }
id = (id + "").replace(/ /ig, "");
for (var i = 0; i < this.length; i++) {
if (this[i][name] == id) {
this[i] = model;
return true;
}
}
return false;
}
//不允许空格,不允许空值
Array.prototype.RemoveByID = function (id, name) {
return ArrCOM.RemoveByID(this, id, name);
}
//去除重复值
Array.prototype.unique = function () {
var data = this || [];
var a = {}; //声明一个对象,javascript的对象可以当哈希表用
for (var i = 0; i < data.length; i++) {
a[data[i]] = true; //设置标记,把数组的值当下标,这样就可以去掉重复的值
}
data.length = 0;
for (var i in a) { //遍历对象,把已标记的还原成数组
this[data.length] = i;
}
return data;
}
Array.prototype.GetIDS = function (name) {
//返回数组的ids,默认返回id
var ids = ""; if (!name) { name = "id";}
for (var i = 0; i < this.length; i++) {
ids += this[i][name] + ",";
}
if (ids && ids.length > 0) { ids = ids.substring(0, ids.length - 1); }
return ids;
}
//深度拷贝数组
Array.prototype.Clone = function () {
function getType(o) {
var _t;
return ((_t = typeof (o)) == "object" ? o == null && "null" || Object.prototype.toString.call(o).slice(8, -1) : _t).toLowerCase();
}
function extend(destination, source) {
for (var p in source) {
if (getType(source[p]) == "array" || getType(source[p]) == "object") {
destination[p] = getType(source[p]) == "array" ? [] : {};
arguments.callee(destination[p], source[p]);
}
else {
destination[p] = source[p];
}
}
}
var destination = [];
var source = this;
extend(destination, source);
return destination;
}
//item,index,array
//低版本IE无ForEach
//if (!Array.prototype.forEach) {
// Array.prototype.forEach = function (callback, thisArg) {
// var T, k;
// if (this == null) {
// throw new TypeError(" this is null or not defined");
// }
// var O = Object(this);
// var len = O.length >>> 0; // Hack to convert O.length to a UInt32
// if ({}.toString.call(callback) != "[object Function]") {
// throw new TypeError(callback + " is not a function");
// }
// if (thisArg) {
// T = thisArg;
// }
// k = 0;
// while (k < len) {
// var kValue;
// if (k in O) {
// kValue = O[k];
// callback.call(T, kValue, k, O);
// }
// k++;
// }
// };
//}
//--------------------------------------------------------------
var JsonHelper = {
//兼容之前,返回html
FillData: function (stlp, list) {
var ref = this;
var html = ref.FillItem(stlp, list, null).toHTML();
return html;
},
//为了兼容做此处理,返回对象模型
FillItem: function (stlp, list, itemBound) {
//用于单传一个json模型,
//iframe之间传值,会导致其判断Array为false
//if (!(list instanceof Array)) { var arr = []; arr.push(list); list = arr; }
function isArray(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }
if (!isArray(list)) { var arr = []; arr.push(list); list = arr; }
var $result = $("<div>");
for (var i = 0; i < list.length; i++) {
var model = list[i];
var item = function (mod) {
var tlp = stlp;
var keyArr = [];
for (var key in mod) { keyArr.push(key); }
//将key字符长度最大的放前面
keyArr.sort(function (a, b) { return a.length > b.length ? -1 : 1; });
for (var j = 0; j < keyArr.length; j++) {
tlp = tlp.Replace("@" + keyArr[j], mod[keyArr[j]]);
}
tlp = tlp.Replace("@_index", (i+1));
tlp = tlp.Replace("@_model", JSON.stringify(model));//将整个模型作为参数传入
var $item = $(tlp);
//需要以JS解析的
var $fun = $item.find("fun");
$fun.each(function () {
var html = $(this).html();
$(this).html(eval(html));
})
//绑定事件,或对其中的元素作进一步判断处理
if (itemBound) {itemBound($item, mod);}
return $item;
}(model);
$result.append(item);
}//for end;
return $result.children();
}
};
jQuery.fn.extend({
toHTML: function () {
var obj = this;
var html = "";
for (var i = 0; i < obj.length; i++) {
html += obj[i].outerHTML;
}
return html;
}
});
String.prototype.Replace = function (str1, str2) {
var rs = this.replace(new RegExp(str1, "gm"), str2);
return rs;
}