Jquery通用开源框架之【ejq.js】

简介

ejq是一款非常小巧的JS工具库,未压缩才50K,在jquery的基础上对jquery缺失部分作了很好的弥补作用。

优点:

1、具有内置的模板解析引擎语法和angularjs相近减少学习成本

2、能够方便的对JSON操作,增删查改

3、随机数功能比较健全

4、丰富的通用函数,这些函数是通过N多项目需求并且积累下来的,实用性很强。

功能介绍

一、随机数

       var num= $.random.getNum(10);//获取0-10之间的随机数字
var num2 = $.random.getNumBetween(100,200);//获取100-200之间的随机数字
var num3 = $.random.getNumBetweenLength(4, 5);//获取长度为4-5的随机数字
var num4 = $.random.getNumByLength(10); //获取长度为10的随机数 var w1 = $.random.getWord(10);//获取10位长度的随机(字母加数字)
var w2 = $.random.getNumBetweenLength(2, 4);//获取2位长度到4位长度之间的随机(字母加数字) var guid = $.random.getGuid();//获取guid

二、对JSON的操作

        var json = [{ id: 1, name: "张三" }, { id: 2, name: "李四" }, { id: 3, name: "王五" }];

        //对json进行筛选获取1和2的json集合
var json1And2 = $.linq.where(json, function (v) { return v.id == 1 || v.id == 2; }); //获取id为1的对象
var zs = $.linq.single(json, function (v) { return v.id == 1; }); //获取id>1的第一个对象
var list = $.linq.first(json, function (v) { return v.id > 1; }); //排序
var json2 = $.linq.order(json, "id", "desc"); //移除id为1的对象
$.linq.remove(json, function (v) { v.id == 1; }); //是否存在ID为1的对象,因为让删了当然反回false
var isAnyOne = $.linq.any(json, function (v) { v.id == 1 });

三、数据的双向绑定

第一眼看去像是angularjs,其实是ejq.js模仿angularjs自已实现的模版解析引擎,因为这个功能才写了2天,有很多功能还没来的急实现,会最在近一个月让它更加的健全。

现在已经实现了 异步和同步的数据绑定功能 ,暂不支持运算符和逻辑条件,只作数据绑定还是够用了。

  $(function () {

            //申明模版引擎的作用域
var model = $ejqApp.module("ng-app");
//控制器操作
model.controller("ctr1", function ($scope, $http, $con, $app, $tool, $event) { $scope.model = {
title: "哈哈",
list: [{ id: 1, name: "table1" }, { id: 2, name: "table2" }, { id: 3, name: "table3" }],
item: [{ id: 3, name: "table3" }, { id: 2, name: "table2" }, { id: 1, name: "table1" }],
id: 1
};
$scope.haha = { text: "haha " }; //使用ajax
$http.jsonList = {
url:"../json.json",//随机URL
type: "get",
}; //获取当前控制器
var thObj = $con.getObj();
//获取当前App
var appObj = $app.getObj(); //给当前控制器name注册事件实现双向绑定
appObj.on("click", thObj.find("#name"), function () { //更新model.Title
$scope.model.title ="哈哈"+ $.random.getNumBetweenLength(8, 10); //更换AJAX URL
if ($http.jsonList.url == "../json.json") {
$http.jsonList.url = "../jsonList.json";
} else {
$http.jsonList.url = "../json.json";
} //重新绑定
$ejqApp.apps.bind() alert("数据重新绑定成功")
}) })
$ejqApp.apps.bind();
})
 HTML

四、常用函数

             //这个函数在写通用框架时比较好用
var kvs = $.action.jsonDictionary({ id: 1, name: "张三" })//将json 转成[{key:id,value:1},{key:name:value:"张三"}] //替换所有a(js中Replace只能替换一个比较2)
$.action.replaceAll("abcdabc", "a", "-") //检测元素是否存在,当存在时执行回调函数,超时会自动停止检测
$.action.elementNullComplate("#id", function () { }); //循环执行检测选择器的元素是否有值,有则执行回调函数过,超过停止检测
$.action.elementValueReady("#id", function () { })
//让setTimeout可以指定执行的次数
$.action.setTimeoutWidthNum(function () { }, 1000, 3);//1秒执行一次,第三次将停止 //去掉最后一个字符
$.action.trimEnd("adfaf,", ","); //指定位置插入字符
$.action.insertStr("adfaf", 2, "2"); //.NET MVC URL处理(可以有效的防止虚拟目录JS跳转URL错误)
//layout.cshtml定义一个hidden <input id='hid' value="@Url.Content("~/")">
$.action.url("/actionName/", "hid", "controllerName", "areaName") //生成的url如下 /xxx/areaName/controllerName/actionName
$.action.url("/actionName/", "hid", "controllerName")
$.action.url("/actionName/", "hid") //更多
//$.action.htmlDecode
//$.action.htmlEncode

五、转换和验证

用法很简单 $.convert.xxx  、$.ValiData.xxx 和 $.valiType.xxx

六、浏览器相关操作

用法也很简单,用法如下:

$.request.queryString().id

$.response.open("/home.index",{id:1})

$.brovali.isIE()

七、通用扩展函数

        //拼接字符串1
var str = "我是中国{0},你是哪国{0}".ejq_format("人");
str = str.ejq_appendFormat(",它是哪国的{0}", "猫"); //拼接字符串2
var str2 = "我是中国{p},你是哪国{p}".ejq_format({p:"人"});
str2 = str2.ejq_appendFormat(",它是哪国的{cat}", { cat: "猫" }); var idObj = "#id".ejq_selector(); //相当于$("#id") var num = 1.2600.ejq_toFixed(2);//四舍五入取2位,和原生toFixed不一样

还有一些功能就不一一的说明了

GIT地址:

https://github.com/sunkaixuan/-common-jquery-ejq.js

源码

/*!
* jQuery Library v2.1
* 说明:Jquery通用库
* 创建时间: sunkaixuan 2014-8-22
* 修改时间:2016-8-2
*/
(function (window, jQuery, undefined) { jQuery.extend({
/*随机值*/
random: {
//获取0-maxNum之间的随机数字
getNum: function (maxNum) {
return $.random.getNumBetween(0, maxNum);
},
//获取min-max之间的随机数字
getNumBetween: function (min, max) {
max = max + 1;
return Math.floor(Math.random() * (max - min)) + min;
},
//获取长度为length的随机数字
getNumByLength: function (length) {
var array = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var reval = "";
for (var i = 0; i < length; i++) {
reval += array[$.random.getNumBetween(0, array.length - 1)];
}
return reval
},
//获取长度为minLength-maxLength之间的随机数
getNumBetweenLength: function (minLength, maxLength) {
var length = $.random.getNumBetween(minLength, maxLength);
return $.random.getNumByLength(length);
},
//获取长度wordLength(数字、字母)组成的字符串
getWord: function (wordLength) {
var array = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
var reval = "";
for (var i = 0; i < wordLength; i++) {
reval += array[$.random.getNumBetween(0, array.length - 1)];
}
return reval;
},
//获取长度为minLength-maxLength之间的随机(数字、字母)组成的字符串
getWordBetweenLength: function (minLength, maxLength) {
var length = $.random.getNumBetween(minLength, maxLength);
return $.random.getWord(length);
},
getGuid: function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
}, /*linq*/
linq: {
contains: function (thisVal, cobj) {
if (jQuery.valiData.isEmpty(thisVal)) {
return false;
}
return thisVal.toString().lastIndexOf(cobj.toString()) != -1;
},
/*where*/
where: function (obj, action) {
if (action == null) return;
var reval = new Array();
$(obj).each(function (i, v) {
if (action(v)) {
reval.push(v);
}
})
return reval;
},
single: function (obj, action) {
if (action == null) return;
var reval = null;
$(obj).each(function (i, v) {
if (action(v)) {
reval = (v);
}
})
return reval;
},
remove: function (obj, action) {
var removeItem = $.linq.single(obj, action);
obj.splice(jQuery.inArray(removeItem, obj), 1);
},
/*any*/
any: function (obj, action) {
if (action == null) return;
var reval = false;
$(obj).each(function (i, v) {
if (action(v)) {
reval = true;
return false;
}
})
return reval;
},
/*select*/
select: function (obj, action) {
if (action == null) return;
var reval = new Array();
$(obj).each(function (i, v) {
reval.push(action(v));
});
return reval;
},
/*each*/
each: function (obj, action) {
if (action == null) return;
jQuery(obj).each(function (i, v) {
action(i, v);
});
},
/*first*/
first: function (obj, action) {
if (action == null) return;
var reval = new Array();
$(obj).each(function (i, v) {
if (action(v)) {
reval.push(v);
return false;
}
})
return reval[0];
},
order: function (obj, field, orderByType) {
var p = obj;
p.sort(function down(x, y) {
if (orderByType != null && orderByType.toLocaleLowerCase() == "desc") {
return (x[field] < y[field]) ? 1 : -1;
} else {
return (x[field] > y[field]) ? 1 : -1;
} })
return p;
} }, /*操作*/
action: {
url: function (actionName, hid, controllerName, areaName) {
if (hid == null) {
hid = "HidUrlAction";
}
var isAction = controllerName == null && areaName == null;
var isControllerName = areaName == null && controllerName != null;
var isArea = areaName != null;
var hidValue = $("#" + hid).val();
var regValue = hidValue.match("(^.*)/(.+)/(.+)/$");
var virtualDirectory = regValue[1];
if (isAction) {
return hidValue + actionName;
} else if (isControllerName) {
areaName = regValue[2]
return (virtualDirectory + "/" + areaName + "/" + controllerName + "/" + actionName);
} else if (isArea) {
return (virtualDirectory + "/" + areaName + "/" + controllerName + "/" + actionName);
}
}, //移除最后一个字符
trimEnd: function (str, c) {
var reg = new RegExp(c + "([^" + c + "]*?)$");
return str.replace(reg, function (w) { if (w.length > 1) { return w.substring(1); } else { return ""; } });
},
htmlEncode: function (str) {
return str.replace(/&/g, '&amp').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
},
htmlDecode: function (str) {
return str.replace(/&amp;/g, '&').replace(/&quot;/g, '\"').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
},
textEncode: function (str) {
str = str.replace(/&amp;/gi, '&');
str = str.replace(/</g, '&lt;');
str = str.replace(/>/g, '&gt;');
return str;
},
textDecode: function (str) {
str = str.replace(/&amp;/gi, '&');
str = str.replace(/&lt;/gi, '<');
str = str.replace(/&gt;/gi, '>');
return str;
},
//获取json的key和value
jsonDictionary: function (json, key) {
var reval = new Array();
for (key in json) {
reval.push({ key: key, value: json[key] });
}
return reval;
},
insertStr: function (str1, n, str2) {
if (str1.length < n) {
return str1 + str2;
} else {
s1 = str1.substring(0, n);
s2 = str1.substring(n, str1.length);
return s1 + str2 + s2;
}
},
//替换所有字符
replaceAll: function (str, findStr, reStr) {
var reg = new RegExp(findStr, "g");
return str.replace(reg, reStr); },
setTimeoutWidthNum: function (fun, time, number) {
if (fun != null) {
setTimeout(function () {
fun();
number--;
if (number > 0) {
$.action.setTimeoutWidthNum(fun, time, number);
}
}, time)
}
},
//循环执行检测元素值是否有值当有值执行回调函数,超时停止检测
elementValueReady: function (selector, fun, time) {
var selObj = $(selector);
if (time == null) time = 0;
time = time + 50;
if (time > 5000) {//间隔超过5秒则停止检测
return;
}
setTimeout(function () {
var val = "";
try {
val = selObj.val();
} catch (e) { }
var valIsNull = val == null || val == "";
if (valIsNull) {
$.action.elementValueReady(selector, fun, time);
} else {
fun();
}
}, time); },
//循环执行检测选择器的元素如果存在该元素,则执行回调函数过,超过停止检测
elementNullComplate: function (selector, fun, time) {
var selObj = $(selector)
if (time == null) time = 0;
time = time + 50;
if (time > 5000) {//间隔超过5秒则停止检测
return;
}
setTimeout(function () {
if (selObj.size() > 0) {
$.action.elementNullComplate(selector, fun, time);
} else {
fun();
}
}, time); } }, /*日期时间处理*/
getdate: {
//获取当前日期
getPresentDate: function () {
var mydate = new Date();
var str = "" + mydate.getFullYear() + "-";
str += (mydate.getMonth() + 1) + "-";
str += mydate.getDate();
return str;
},
//获取当前日期之前的年月date为日期"2016-6",number>0&<11月数 -leo
//例:getfirsthalf("2016-06",5) 返回半年内的年月数组
getfirsthalf: function (date, number) {
var d = new Date(date.replace(/[^\d]/g, "/") + "/1");
var result = [date];
for (var i = 0; i < number; i++) {
d.setMonth(d.getMonth() - 1);
var m = d.getMonth() + 1;
m = m < 10 ? "0" + m : m;
result.push(d.getFullYear() + "-" + m);
}
return result;
},
//获取一个月天数 or 最后一天 tpye=Day返回天数 否则返回最后一天日期-leo
getLastDay: function (year, month, dateTpye) {
debugger
var new_year = year; //取当前的年份
var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)
if (month > 12) //如果当前大于12月,则年份转到下一年
{
new_month -= 12; //月份减
new_year++; //年份增
}
var new_date = new Date(new_year, new_month + 1, 1); //取当年当月中的第一天
var date_count = (new Date(new_date.getTime() - 1000 * 60 * 60 * 24)).getDate();//获取当月的天数
var last_date = new Date(new_date.getTime() - 1000 * 60 * 60 * 24);//获得当月最后一天的日期
if (dateTpye == 'dayNum') {
return date_count;
}
else {
return last_date;
}
},
//获取两个时间相差天数-leo
//计算sDate1 - sDate2 得到相差天数 2016-06-18格式
getdatedifference: function (sDate1, sDate2) {
var aDate, oDate1, oDate2, iDays
aDate = sDate1.split("-")
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]) //转换为12-18-2006格式
aDate = sDate2.split("-")
oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0])
iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24) //把相差的毫秒数转换为天数
return iDays
},
//比较两个时间大小
checkEndTime: function (startTime, endTime) {
var starttime = String(startTime).replace("-", "/").replace("-", "/")
var start = new Date(starttime);
var endtime = String(endTime).replace("-", "/").replace("-", "/")
var end = new Date(endtime);
if (end < start) {
return "Small";
}
else if (end > start) {
return "large";
}
else {
return "equal";
}
} }, /*转换*/
convert: {
//还原json格式的时间
jsonReductionDate: function (cellval, format) {
try {
if (cellval == "" || cellval == null) return "";
var date = new Date(parseInt(cellval.substr(6)));
if (format == null) {
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
return date.getFullYear() + "-" + month + "-" + currentDate;
} else {
return $.convert.toDate(date, format);
}
} catch (e) {
return "";
}
},
jsonToStr: function (object) {
var type = typeof object;
if ('object' == type) {
if (Array == object.constructor) type = 'array';
else if (RegExp == object.constructor) type = 'regexp';
else type = 'object';
}
switch (type) {
case 'undefined':
case 'function':
case 'unknown':
return;
break;
case 'function':
case 'boolean':
case 'regexp':
return object.toString();
break;
case 'number':
return isFinite(object) ? object.toString() : 'null';
break;
case 'string':
return '"' + object.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g, function () {
var a = arguments[0];
return (a == '\n') ? '\\n' : (a == '\r') ? '\\r' : (a == '\t') ? '\\t' : ""
}) + '"';
break;
case 'object':
if (object === null) return 'null';
var results = [];
for (var property in object) {
var value = jQuery.convert.jsonToStr(object[property]);
if (value !== undefined) results.push(jQuery.convert.jsonToStr(property) + ':' + value);
}
return '{' + results.join(',') + '}';
break;
case 'array':
var results = [];
for (var i = 0; i < object.length; i++) {
var value = jQuery.convert.jsonToStr(object[i]);
if (value !== undefined) results.push(value);
}
return '[' + results.join(',') + ']';
break;
}
},
strToJson: function (str) {
return jQuery.parseJSON(str);
},
toDate: function (date, format) {
var data = new Date(date);
var o = {
"M+": data.getMonth() + 1, //month
"d+": data.getDate(), //day
"h+": data.getHours(), //hour
// "H+": date.getHours(), //hour
"m+": data.getMinutes(), //minute
"s+": data.getSeconds(), //second
"q+": Math.floor((data.getMonth() + 3) / 3), //quarter
"S": data.getMilliseconds() //millisecond
}
if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
(data.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1,
RegExp.$1.length == 1 ? o[k] :
("00" + o[k]).substr(("" + o[k]).length));
return format;
},
toInt: function (par) {
if (par == null || par == NaN || par == "") return 0;
return parseInt(par);
},
toNumber: function (obj, pointNum) {
if ($.valiData.isDecimal(obj)) {
var num = parseFloat(obj) + "";
if (num.lastIndexOf(".") == -1) {
return parseFloat(num);
} else {
var index = num.indexOf(".");
var length = num.length;
if ((length - index - 1) > pointNum) {
return parseFloat(parseFloat(num).toFixed(pointNum));
} else {
return parseFloat(num);
}
}
} else {
return 0;
}
},
toFloat: function (par) {
if (par == null || par == NaN || par == "") return 0;
return parseFloat(par);
},
xmlToJQuery: function (data) {
var xml;
if ($.browser.msie) {// & parseInt($.browser.version) < 9
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
// xml = $(xml).children('nodes'); //这里的nodes为最顶级的节点
} else {
xml = data;
}
return $(xml);
},
//将标准时间转换成时间格式-leo
//day: Thu Aug 22 2013 15:12:00 GMT+0800 (中国标准时间) format: yyyy-MM-dd hh:mm:ss
standardTimeToDateTime: function (day, format) {
var dateTime = new Date(day);
var tostr = function (i) {
return (i < 10 ? '0' : '') + i
};
return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function (item) {
switch (item) {
case 'yyyy':
return tostr(dateTime.getFullYear());
break;
case 'MM':
return tostr(dateTime.getMonth() + 1);
break;
case 'mm':
return tostr(dateTime.getMinutes());
break;
case 'dd':
return tostr(dateTime.getDate());
break;
case 'HH':
return tostr(dateTime.getHours());
break;
case 'ss':
return tostr(dateTime.getSeconds());
break;
}
})
}
}, /*数据验证*/
valiData: {
isEmpty: function (val) { return val == undefined || val == null || val == "" || val.toString() == ""; },
isZero: function (val) { return val == null || val == "" || val == 0 || val == "0"; },
//判断是否为数字
isNumber: function (val) { return (/^\d+$/.test(val)); },
//是否是邮箱
isMail: function (val) { return (/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(val)); },
//是否是手机
isMobilePhone: function (val) { return (/\d{11}$/.test(val)); },
//判断是否为负数和整数
isNumberOrNegative: function (val) { return (/^\d+|\-\d+$/.test(val)); },
//金额验证
isMoney: function (val) { return (/^[1-9]d*.d*|0.d*[1-9]d*|\d+$/.test(val)); },
isDecimal: function (val) { return (/^(-?\d+)(\.\d+)?$/.test(val)); } }, /*类型验证*/
valiType: {
isArray: function (obj) { return (typeof obj == 'object') && obj.constructor == Array; },
isString: function (str) { return (typeof str == 'string') && str.constructor == String; },
isDate: function (obj) { return (typeof obj == 'object') && obj.constructor == Date; },
isFunction: function (obj) { return (typeof obj == 'function') && obj.constructor == Function; },
isArrayLike: function (obj) {
if (obj == null || isWindow(obj)) {
return false;
}
var length = "length" in Object(obj) && obj.length; if (obj.nodeType === NODE_TYPE_ELEMENT && length) {
return true;
} return isString(obj) || isArray(obj) || length === 0 ||
typeof length === 'number' && length > 0 && (length - 1) in obj;
},
isObject: function (obj) { return (typeof obj == 'object') && obj.constructor == Object; }
}, pageHelper: {
referenceFile: function (url, type) {
$(function () {
var isJs = type == "js";
if (isJs) {
var isAny = $("[src='" + url + "']").size() > 0;
if (!isAny)
$("head").append("<script src='" + url + "' /> ");
}
else {
var isAny = $("[href='" + url + "']").size() > 0;
if (!isAny)
$("head").append("<link href='" + url + "'rel='stylesheet' >");
}
})
}
}, //定位
position: {
//使页面元素上下左右居中
center: function (eleSelector) {
var obj = $(eleSelector);
if (obj.size() > 0) {
obj.each(function () {
var obj = $(this);
var wh = $(window).height();
var ww = $(window).width();
var scrh = $(document).scrollTop();
var objh = obj.height();
var objw = obj.width();
var top = scrh + ((wh - objh) / 2);
var left = ww / 2 - objw / 2;
if (scrh > 0) {
obj.css({ position: "absolute", left: left, top: top });
}
})
}
}
}, //ajax辅助
ajaxhelper: {
error: function (msg, action) {
if (action != null) {
action(msg);
}
try {
console.log(msg);
} catch (e) { }
}
}, /*********************************浏览器操作*********************************/
/*浏览获取操作*/
request: {
queryString: function () {
var s1;
var q = {}
var s = document.location.search.substring(1);
s = s.split("&");
for (var i = 0, l = s.length; i < l; i++) {
s1 = s[i].split("=");
if (s1.length > 1) {
var t = s1[1].replace(/\+/g, " ")
try {
q[s1[0]] = decodeURIComponent(t)
} catch (e) {
q[s1[0]] = unescape(t)
}
}
}
return q;
},
url: function () {
return window.location.href;
},
urlEncode: function (str) {
if (str == null) return "";
var tempstr = str.replace(/\+/g, encodeURI("%2B"));
return tempstr;
},
domain: function () {
return window.location.host;
},
pageName: function () {
var a = location.href;
var b = a.split("/");
var c = b.slice(b.length - 1, b.length).toString(String).split(".");
return c.slice(0, 1);
},
pageFullName: function () {
var strUrl = location.href;
var arrUrl = strUrl.split("/");
var strPage = arrUrl[arrUrl.length - 1];
return strPage;
},
back: function () {
history.go(-1);
},
getCookie: function (cookieName) {
var cookieValue = document.cookie;
var cookieStartAt = cookieValue.indexOf("" + cookieName + "=");
if (cookieStartAt == -1) {
cookieStartAt = cookieValue.indexOf(cookieName + "=");
}
if (cookieStartAt == -1) {
cookieValue = null;
}
else {
cookieStartAt = cookieValue.indexOf("=", cookieStartAt) + 1;
cookieEndAt = cookieValue.indexOf(";", cookieStartAt);
if (cookieEndAt == -1) {
cookieEndAt = cookieValue.length;
}
cookieValue = unescape(cookieValue.substring(cookieStartAt, cookieEndAt));//解码latin-1
}
return cookieValue;
},
//打印
print: function (id/*需要打印的最外层元素ID*/) {
var el = document.getElementById(id);
var iframe = document.createElement('IFRAME');
var doc = null;
iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;');
document.body.appendChild(iframe);
doc = iframe.contentWindow.document;
doc.write('<div>' + el.innerHTML + '</div>');
doc.close();
iframe.contentWindow.focus();
iframe.contentWindow.print();
if (navigator.userAgent.indexOf("MSIE") > 0) {
document.body.removeChild(iframe);
}
},
//加入收藏夹
addFavorite: function (surl, stitle) {
try {
window.external.addFavorite(surl, stitle);
} catch (e) {
try {
window.sidebar.addpanel(stitle, surl, "");
} catch (e) {
alert("加入收藏失败,请使用ctrl+d进行添加");
}
}
},
//设为首页
setHome: function (obj, vrl) {
try {
obj.style.behavior = 'url(#default#homepage)';
obj.sethomepage(vrl);
} catch (e) {
if (window.netscape) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("此操作被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将[signed.applets.codebase_principal_support]的值设置为'true',双击即可。");
}
} else {
alert("抱歉,您所使用的浏览器无法完成此操作。\n\n您需要手动设置为首页。");
}
}
}
}, /*浏览器请求操作*/
response: {
setCookie: function (name, value, time) {
if (time == null) {
time = 30 * 60 * 1000
}
//设置名称为name,值为value的Cookie
var expdate = new Date(); //初始化时间
expdate.setTime(expdate.getTime() + time); //时间
document.cookie = name + "=" + value + ";expires=" + expdate.toGMTString() + ";path=/"; //即document.cookie= name+"="+value+";path=/"; 时间可以不要,但路径(path)必须要填写,因为JS的默认路径是当前页,如果不填,此cookie只在当前页面生效!~
},
open: function (url, params) {
if (params == null || params == "") {
window.open(url);
} else {
if (jQuery.linq.contains(url.toString(), "?")) {
var rurl = url + "&" + jQuery.param(params);
window.open(rurl);
} else {
var rurl = url + "?" + jQuery.param(params);
window.open(rurl);
}
}
},
//页面跳转
redirect: function (url, params) {
if (params == null || params == "") {
window.location.href = url;
} else {
if (jQuery.linq.contains(url.toString(), "?")) {
var rurl = url + "&" + jQuery.param(params);
window.location.href = rurl;
} else {
var rurl = url + "?" + jQuery.param(params);
window.location.href = rurl;
}
}
} }, /*浏览器判段*/
broVali: {
//jquery1.9以上只需要判段IE
isIE: function () {
if (!!window.ActiveXObject || "ActiveXObject" in window)
return true;
else
return false;
},
//老版本jquery用下面的函数
isIE6: function () {
var flag = false;
if ($.browser.msie && $.browser.version == "6.0")
flag = true;
return flag;
},
isIE7: function () {
var flag = false;
if ($.browser.msie && $.browser.version == "7.0")
flag = true;
return flag;
},
isIE8: function () {
var flag = false;
if ($.browser.msie && $.browser.version == "8.0")
flag = true;
return flag;
},
isIE9: function () {
var flag = false;
if ($.browser.msie && $.browser.version == "9.0")
flag = true;
return flag;
},
isIE10: function () {
var flag = false;
if ($.browser.msie && $.browser.version == "10.0")
flag = true;
return flag;
},
isIE11: function () {
var flag = false;
if ($.browser.msie && $.browser.version == "11.0")
flag = true;
return flag;
},
isMozilla: function () {
var flag = false;
if ($.browser.mozilla)
flag = true;
return flag;
},
isOpera: function () {
var flag = false;
if ($.browser.opera)
flag = true;
return flag;
},
isSafri: function () {
var flag = false;
if ($.browser.safari)
flag = true;
return flag;
},
isMobile: function () {
var userAgentInfo = navigator.userAgent;
var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
var flag = false;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = true; break; }
} return flag;
},
isIPhone: function () {
var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
return jQuery.jQueryAny(Agents, function (v) {
return v == "iPhone";
});
},
isAndroid: function () {
var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
return jQuery.jQueryAny(Agents, function (v) {
return v == "Android";
});
}
} }); /*********************************模板解析引擎 by 2016-8-2*****************/
$(function () {
//通用正则
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
window.$ejqApp = {};
$ejqApp.apps = [];
function setModule(fn, ctr) {
var pars = [];
var fnText = fn.toString().replace(STRIP_COMMENTS, '');
argDecl = fnText.match(FN_ARGS);
forEach(argDecl[1].split(FN_ARG_SPLIT), function (arg) {
arg.replace(FN_ARG, function (all, underscore, name) {
pars.push({ name: name });
});
});
var queueItem = { controller: ctr, pars: pars };
return queueItem;
}
$ejqApp.module = function (app, obj) {
var apps = $.linq.where($ejqApp.apps, function (v) { return v.appName == app });
var isAny = apps != null && apps.length > 0;
if (isAny) {
return apps[0];
} else {
var reval = {
appName: app,
templateHtml: $("[ ng-app=\"" + app + "\"]").html(),
getObj: function () { return $("[ ng-app=\"" + app + "\"]") },
controller: function (ctr, obj) {
var th = this;
var app = this.getObj();
var ctrObj = app.find("[ng-controller='" + ctr + "']");
var queueItem = setModule(obj, ctrObj);
$.each(queueItem.pars, function (i, v) {
if (v.name == "$con") {
v.getObj = function () {
return th.getObj().find("[ng-controller='" + ctr + "']");
};
}
if (v.name == "$app") {
v.getObj = function (selector) {
return th.getObj();
}
}
if (v.name == "$tool") {
v.method = {}
} if (v.name == "$event") {
v.getObj = function (selector) {
return th.getObj();
}
}
}) obj.apply(new function () { }, queueItem.pars);
queueItem.name = ctr;
this.controllerParas = { pars: queueItem };
}
};
$ejqApp.apps.push(reval);
return reval;
}
}
$ejqApp.apps.bind = function () {
$($ejqApp.apps).each(function (i, v) {
var appObj = v.getObj();
appObj.html(v.templateHtml);
var th = v;
$.each(v.controllerParas, function (i, pars) {
var obj = appObj.find("[ng-controller='" + pars.name + "']");
$.each(pars.pars, function (i, par) {
switch (par.name) {
case "$scope":
$scope(obj, par);
break;
case "$http":
$http(obj, par);
break;
}
})
})
})
}
function $scope(obj, par) {
var kvs = $.action.jsonDictionary(par)
$.each(kvs, function (i, v) {
if (v.key == "name") return;
var isArray = $.valiType.isArray(v);
if (isArray) {
resolveArray(v.key, obj, v.value)
} else {
resolveJson(v.key, obj, v.value)
}
})
}
function $http(obj, par) {
var kvs = $.action.jsonDictionary(par)
var kv = $.linq.single(kvs, function (v) {
return $.valiType.isObject(v.value);
});
if (kv == null) return;
var ajaxSetting = kv.value;
if (ajaxSetting != null) { if (ajaxSetting.cache == null) {
ajaxSetting.cache = false;
}
$.ajax({
url: ajaxSetting.url,
cache: ajaxSetting.cache,
dataType: "json",
type: ajaxSetting.type,
success: function (msg) {
var isArray = $.valiType.isArray(msg);
if (isArray) {
resolveArray(kv.key, obj, msg)
} else { resolveJson(kv.key, obj, msg)
}
if (ajaxSetting.success != null) {
ajaxSetting.success(msg);
} },
error: function (msg) {
if (ajaxSetting.error != null) {
ajaxSetting.error(msg);
}
}
});
}
}
function resolveJson(name, obj, json, prefix) {
if (prefix == null) prefix = "";
var kvs = $.action.jsonDictionary(json)
var dataHtml = obj.data("myng-html");
var innerHtml = obj.html();
if (dataHtml == null) {
innerHtml = obj.html();
} else {
innerHtml = dataHtml;
}
var funs = [];
if (innerHtml != null && innerHtml != "") {
$.each(kvs, function (i, v) {
var isArray = $.valiType.isArray(v.value);
if (isArray) {
funs.push({ name: v.key, obj: obj, value: v.value, prefix: name });
} else {
innerHtml = innerHtml.replace(new RegExp("\{\{" + prefix + name + "\." + v.key + "\}\}"), v.value);
}
})
obj.html(innerHtml);
obj.data("myng-html", innerHtml);
$.each(funs, function (i, v) {
resolveArray(v.name, v.obj, v.value, v.prefix);
})
}
}
function resolveArray(name, obj, json, prefix) {
obj.find("[ng-repeat]").each(function () {
var th = $(this);
var innerTemplate = th.html();
var repeatValue = th.attr("ng-repeat");
prefix = prefix == null ? "" : prefix;
var reg = new RegExp("([a-z,A-Z][0-9,a-z,A-Z]*)\\s+in\\s+" + prefix + "." + name);
if (reg.test(repeatValue)) {
th.html("");
var itemName = repeatValue.match(reg)[1];
$.each(json, function (i, jsonItem) {
var kvs = $.action.jsonDictionary(jsonItem)
var appendItem = innerTemplate;
$.each(kvs, function (i, v) {
var isArray = $.valiType.isArray(v.value);
if (isArray) {
debugger
resolveArray(v.key, obj, v.value, name);
} else {
appendItem = appendItem.replace(new RegExp("\{\{" + itemName + "\." + v.key + "\}\}"), v.value);
}
})
th.append(appendItem);
});
}
})
var dataHtml = obj.data("myng-html", obj.html());
}
function forEach(obj, iterator, context) {
var key, length;
if (obj) {
if ($.valiType.isFunction(obj)) {
for (key in obj) {
if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
iterator.call(context, obj[key], key, obj);
}
}
} else if ($.valiType.isArray(obj) || $.valiType.isArrayLike(obj)) {
var isPrimitive = typeof obj !== 'object';
for (key = 0, length = obj.length; key < length; key++) {
if (isPrimitive || key in obj) {
iterator.call(context, obj[key], key, obj);
}
}
} else if (obj.forEach && obj.forEach !== forEach) {
obj.forEach(iterator, context, obj);
} else if (isBlankObject(obj)) {
for (key in obj) {
iterator.call(context, obj[key], key, obj);
}
} else if (typeof obj.hasOwnProperty === 'function') {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
iterator.call(context, obj[key], key, obj);
}
}
} else {
for (key in obj) {
if (hasOwnProperty.call(obj, key)) {
iterator.call(context, obj[key], key, obj);
}
}
}
}
return obj;
} }) /*********************************form操作*********************************/
jQuery.fn.extend({
//获取元素属性以","隔开
attrToStr: function (attr) {
var reval = "";
this.each(function () {
reval += jQuery(this).attr(attr) + ","
})
reval = jQuery.jQueryAction.trimEnd(reval, ",");
return reval;
},
//清空表单
formClear: function () {
this.find("input:text,select,input:hidden,input:password").each(function () {
$(this).val("");
});
this.find("input:checkbox,input:radio").each(function () {
$(this).removeAttr("checked");
});
},
//将json对象自动填充到表单
//例如 $('form').formFill({data:{id:1},prefix:"user."}) 填充后 <input name='user.id' value='1' >
formFill: function (option) {
var prefix = option.prefix;
if (prefix == undefined) prefix = "";
var frmData = option.data;
for (i in frmData) {
var dataKey = i;
var thisData = this.find("[name='" + prefix + i + "']");
var text = "text";
var hidden = "hidden";
if (thisData != null) {
var thisDataType = thisData.attr("type");
var val = frmData[i];
var isdata = (val != null && val.toString().lastIndexOf("/Date(") != -1);
if (thisDataType == "radio") {
thisData.filter("[value=" + val + "]").attr("checked", "checked")
if (val == true || val == "0") val = "True";
else if (val == false || val != "0") val = "False";
thisData.filter("[value=" + val + "]").not("donbool").attr("checked", "checked")
} else if (thisDataType == "checkbox") {
if (thisData.size() == 1) {
if (val == "true" || val == 1 || val == "True" || val == "1") {
thisData.attr("checked", "checked");
} else {
thisData.removeAttr("checked");
}
} else { thisData.removeAttr("checked");
var cbIndex = i;
if (val.lastIndexOf(",") == -1) {
this.find("[name='" + prefix + dataKey + "'][value='" + prefix + val + "']").attr("checked", "checked");
} else {
jQuery(val.split(',')).each(function (i, v) {
this.find("[name='" + prefix + dataKey + "'][value='" + prefix + v + "']").attr("checked", "checked");;
})
}
} } else {
if (isdata) {
val = jQuery.Convert.jsonReductionDate(val);
}
if (val == "null" || val == null)
val = "";
if (val == "" && thisData.attr("watertitle") == thisData.val()) {
} else {
thisData.val(val + "");
thisData.removeClass("watertitle")
}
}
} } } }); /*********************************通用属性扩展*****************************/
jQuery.ejqInit = function () {
String.prototype.ejq_format = function (args) {
var _dic = typeof args === "object" ? args : arguments;
var reval = this.replace(/\{([^{}]+)\}/g, function (str, key) {
return _dic[key];
});
return reval;
}
String.prototype.ejq_append = function (args) {
return this + args;
}
String.prototype.ejq_appendFormat = function (appendValue, appendArgs) {
return this + appendValue.ejq_format(appendArgs);
}
String.prototype.ejq_selector = function (args) {
return $(this);
}
String.prototype.ejq_toFixed = Number.prototype.ejq_toFixed = function (d) {
var s = this + ""; if (!d) d = 0;
if (s.indexOf(".") == -1) s += "."; s += new Array(d + 1).join("0");
if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) {
var s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true;
if (a == d + 2) {
a = s.match(/\d/g); if (parseInt(a[a.length - 1]) > 4) {
for (var i = a.length - 2; i >= 0; i--) {
a[i] = parseInt(a[i]) + 1;
if (a[i] == 10) { a[i] = 0; b = i != 1; } else break;
}
}
s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"), "$1.$2");
} if (b) s = s.substr(1); return (pm + s).replace(/\.$/, "");
} return this + "";
}; }
jQuery.ejqInit(); })(window, jQuery)

query通用开源框架的更多相关文章

  1. 【开源推荐】AllJoyn:打造全球物联网的通用开源框架

    摘要:随着智能设备的发展,物联网逐渐进入了人们的生活.据预测,未来几乎一切东西(超过500亿台设备)都可以互联.高通公司发布了开源项目AllJoyn,这是一个能够使连接设备间进行互操作的通用软件框架和 ...

  2. 功能齐全并且比较时髦的Jquery通用开源框架之【ejq.js】

    简介 ejq是一款非常小巧的JS工具库,未压缩才50K,在jquery的基础上对jquery缺失部分作了很好的弥补作用. 优点: 1.具有内置的模板解析引擎语法和angularjs相近减少学习成本 2 ...

  3. [转]Jquery通用开源框架之【ejq.js】

    ejq是一款非常小巧的JS工具库,未压缩才50K,在jquery的基础上对jquery缺失部分作了很好的弥补作用. 优点: 1.具有内置的模板解析引擎语法和angularjs相近减少学习成本 2.能够 ...

  4. gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架

    gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架 Google Guava官方教程(中文版 ...

  5. 开源通用爬虫框架YayCrawler-开篇

    各位好!从今天起,我将用几个篇幅的文字向大家介绍一下我的一个开源作品--YayCrawler,其在GitHub上的网址是:https://github.com/liushuishang/YayCraw ...

  6. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  7. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  8. 介绍一个非常好用的跨平台C++开源框架:openFrameworks

    介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...

  9. hibernate 入门([数据访问中间件] 开源框架)

    1.内容:  hibernate 也是一个经典的[数据访问中间件] 开源框架.    2.hibernate核心组件       SessionFactory[整个数据的操作]重量级组件       ...

随机推荐

  1. Learning Docker--chapter 1

    CONTENTS: (1) An introduction to Docker (2) Docker on Linux (3) Differentiating between containeriza ...

  2. 开心菜鸟系列学习笔记-------javascript(3)

    一.原型链:     1)Object 是一个属性的集合,并且都拥有一个单独的原型对象.,这个原型对象object可以是一个object或者null值 2)不过一般来说,我们会使用__内部属性名__下 ...

  3. BZOJ 1977 次小生成树(最近公共祖先)

    题意:求一棵树的严格次小生成树,即权值严格大于最小生成树且权值最小的生成树. 先求最小生成树,对于每个不在树中的边,取两点间路径的信息,如果这条边的权值等于路径中的权值最大值,那就删掉路径中的次大值, ...

  4. VS2010的openssl源码编译方法

    http://download.csdn.net/download/soucula/9591308

  5. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(1)--后端 chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车 ...

  6. bzoj1752 [Usaco2005 qua]Til the Cows Come Home

    Description Bessie is out in the field and wants to get back to the barn to get as much sleep as pos ...

  7. 在CDHtmlDialog中处理WindowClosing

    要截获window.close(),就得截获CDHtmlDialog的WindowClosing.以下是示例代码: // header DECLARE_EVENTSINK_MAP() void Win ...

  8. HashMap Java Doc

    原文 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneab ...

  9. java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade

    2012-10-4 19:50:37 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for se ...

  10. html天气预报小插件

    <head></head> <body> <iframe width="225" scrolling="no" hei ...