if (jQuery.datepicker) {
jQuery.datepicker.setDefaults({
dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'],
dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],
monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
monthNamesShort: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二'],
weekHeader: '周',
nextText: '下月>',
prevText: '<上月',
closeText: '完成',
currentText: '今天',
yearSuffix: '年'
});
}
标签: JavaScript
JQuery UI Tabs控件扩展addTab方法
/*扩展 jQuery.browser 的属性*/
if (!jQuery.browser) {
jQuery.browser = {};
}
jQuery.extend(jQuery.browser, {
/*检查浏览器是否支持CSS3*/
css3: (function () {
var css3Div = document.createElement('div');
if ('border-radius' in css3Div.style) {
css3Div.style['border-radius'] = '3px';
return css3Div.style['border-radius'] == '3px';
}
else {
return false;
}
})(),
/*检查浏览器是否支持HTML5*/
html5: (function () {
return !!document.createElement('canvas').getContext;
})()
});
jQuery.widget("ui.tabs", $.ui.tabs, {
addTab: function (options) {
var _self = this;
options = $.extend({
title: 'New Tab', //标题
content: '', //内容
id: 'tab_' + new Date().getTime(), //Id
enableClose: true, //是否允许关闭
activate: true //是否激活
}, options || {});
var id = "tabs-" + options.id;
var tab = this.element.find('.ui-tabs-nav li[aria-controls="' + id + '"]');
if (tab.length < 1) {
var _li = $('<li></li>').append($('<a></a>').attr('href', '#' + id).html(options.title));
this.element.find(".ui-tabs-nav").append(_li);
var _div = $('<div></div>');
_div.attr('id', id);
_div.append(options.content);
this.element.append(_div);
if (options.enableClose) {
var _closeBtn = $('<span class="ui-icon ui-icon-close" role="presentation" title="关闭"></span>').click(function () {
var _this = $(this);
var panelId = _li.remove().attr("aria-controls");
$("#" + panelId).remove();
if (_li.hasClass('ui-tabs-active')) {
_self.element.tabs('option', 'active', _self.element.find(".ui-tabs-nav li").length - 1);
}
});
_li.append(_closeBtn);
}
this.refresh();
if (options.activate) {
this._activate(this.element.find(".ui-tabs-nav li").length - 1);
}
//解决不支持css3的浏览器问题
if (!$.browser.css3) {
_div.height(this.element.innerHeight() - this.element.css('padding-top').replace('px', '') - this.element.find(".ui-tabs-nav").outerHeight(true) - Math.mul(_div.css('margin-top').replace('px', ''), 2));
}
} else if (options.activate) {
var activeIndex = this.element.find(".ui-tabs-nav li").index(tab);
this._activate(activeIndex);
}
}
});
IE jscript 实现 Array.find()
由于IE 家族jscript不支持find,需要而外代码实现Array属性find的扩展
if (!Array.prototype.find) { Array.prototype.find = function (callback) { for(var i in this){ if (callback(this[i], i, this)) { return this[i]; } } return null; } }
javascript 下载 base64
function downloadBase64(base64, fileName) {
base64 = base64.replace(/.+;base64,/, '');
var byteCharacters = atob(base64);
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var blob = new Blob([byteArray], { type: 'application/octet-stream' });
if (navigator.msSaveOrOpenBlob) {// if IE
navigator.msSaveBlob(blob, fileName);
} else { //if not IE
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
window.URL.revokeObjectURL(link.href);
}
}
javascript 实现 date format
比较好用的 js 时间格式化方法,复杂的多种格式。
Date.prototype.format = function (mask) {
var d = this;
var zeroize = function (value, length) {
if (!length) length = 2;
value = String(value);
for (var i = 0, zeros = ''; i < (length - value.length) ; i++) {
zeros += '0';
}
return zeros + value;
};
return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function ($0) {
switch ($0) {
case 'd':
return d.getDate();
case 'dd':
return zeroize(d.getDate());
case 'ddd':
return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][d.getDay()];
case 'dddd':
return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getDay()];
case 'M':
return d.getMonth() + 1;
case 'MM':
return zeroize(d.getMonth() + 1);
case 'MMM':
return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getMonth()];
case 'MMMM':
return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][d.getMonth()];
case 'yy':
return String(d.getFullYear()).substr(2);
case 'yyyy':
return d.getFullYear();
case 'h':
return d.getHours() % 12 || 12;
case 'hh':
return zeroize(d.getHours() % 12 || 12);
case 'H':
return d.getHours();
case 'HH':
return zeroize(d.getHours());
case 'm':
return d.getMinutes();
case 'mm':
return zeroize(d.getMinutes());
case 's':
return d.getSeconds();
case 'ss':
return zeroize(d.getSeconds());
case 'l':
return zeroize(d.getMilliseconds(), 3);
case 'L':
var m = d.getMilliseconds();
if (m > 99) m = Math.round(m / 10);
return zeroize(m);
case 'tt':
return d.getHours() < 12 ? 'am' : 'pm';
case 'TT':
return d.getHours() < 12 ? 'AM' : 'PM';
case 'Z':
return d.toUTCString().match(/[A-Z]+$/);
// Return quoted strings with the surrounding quotes removed
default:
return $0.substr(1, $0.length - 2);
}
});
};
javascript String 转 bytes
实现String转bytes属性扩展
String.prototype.toBytes = function () {
var ch, st, re = [];
for (var i = 0; i < this.length; i++) {
ch = this.charCodeAt(i); // get char
st = []; // set up "stack"
do {
st.push(ch & 0xFF); // push byte to stack
ch = ch >> 8; // shift value down by 1 byte
}
while (ch);
// add stack contents to result
// done because chars have "wrong" endianness
re = re.concat(st.reverse());
}
// return an array of bytes
return re;
}
JSON序列化JavaScriptSerializer
解决微软MVC请求响应的JSON的日期格式问题。需要结合StringBuilder
JavaScriptSerializer = {};
JavaScriptSerializer._charsToEscapeRegExs = [];
JavaScriptSerializer._charsToEscape = [];
JavaScriptSerializer._dateRegEx = new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"', 'g');
JavaScriptSerializer._escapeChars = {};
JavaScriptSerializer._escapeRegEx = new RegExp('["\\\\\\x00-\\x1F]', 'i');
JavaScriptSerializer._escapeRegExGlobal = new RegExp('["\\\\\\x00-\\x1F]', 'g');
JavaScriptSerializer._jsonRegEx = new RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g');
JavaScriptSerializer._jsonStringRegEx = new RegExp('"(\\\\.|[^"\\\\])*"', 'g');
JavaScriptSerializer._init = function () {
var replaceChars = ['\\u0000', '\\u0001', '\\u0002', '\\u0003', '\\u0004', '\\u0005', '\\u0006', '\\u0007',
'\\b', '\\t', '\\n', '\\u000b', '\\f', '\\r', '\\u000e', '\\u000f', '\\u0010', '\\u0011',
'\\u0012', '\\u0013', '\\u0014', '\\u0015', '\\u0016', '\\u0017', '\\u0018', '\\u0019',
'\\u001a', '\\u001b', '\\u001c', '\\u001d', '\\u001e', '\\u001f'];
JavaScriptSerializer._charsToEscape[0] = '\\';
JavaScriptSerializer._charsToEscapeRegExs['\\'] = new RegExp('\\\\', 'g');
JavaScriptSerializer._escapeChars['\\'] = '\\\\';
JavaScriptSerializer._charsToEscape[1] = '"';
JavaScriptSerializer._charsToEscapeRegExs['"'] = new RegExp('"', 'g');
JavaScriptSerializer._escapeChars['"'] = '\\"';
for (var i = 0; i < 32; i++) {
var c = String.fromCharCode(i);
JavaScriptSerializer._charsToEscape[i + 2] = c;
JavaScriptSerializer._charsToEscapeRegExs[c] = new RegExp(c, 'g');
JavaScriptSerializer._escapeChars[c] = replaceChars[i];
}
}
JavaScriptSerializer.serialize = function (object) {
var stringBuilder = new StringBuilder();
var booleanWithBuilder = function (bool, builder) {
if (typeof bool !== 'undefined') {
builder.append(bool);
} else {
builder.append('false');
}
}
var numberWithBuilder = function (number, builder) {
if (typeof number !== 'undefined' && number.toString() !== 'NaN') {
builder.append(number);
} else {
builder.append('null');
}
}
var stringWithBuilder = function (string, builder) {
builder.append('"');
if (JavaScriptSerializer._escapeRegEx.test(string)) {
if (JavaScriptSerializer._charsToEscape.length === 0) {
JavaScriptSerializer._init();
}
if (string.length < 128) {
string = string.replace(JavaScriptSerializer._escapeRegExGlobal,
function (x) { return JavaScriptSerializer._escapeChars[x]; });
}
else {
for (var i = 0; i < 34; i++) {
var c = JavaScriptSerializer._charsToEscape[i];
if (string.indexOf(c) !== -1) {
if ($.browser.opera || $.browser.mozilla) {
string = string.split(c).join(JavaScriptSerializer._escapeChars[c]);
}
else {
string = string.replace(JavaScriptSerializer._charsToEscapeRegExs[c],
JavaScriptSerializer._escapeChars[c]);
}
}
}
}
}
builder.append(string);
builder.append('"');
}
var dateWithBuilder = function (date, builder) {
if (date && date.toString() !== 'NaN') {
builder.append('"\\/Date(');
var timeOffset = date.getTimezoneOffset() * 60 * 1000;
if (timeOffset != 0) {
var time = date.getTime() - timeOffset;
builder.append(time);
}
else {
builder.append(date.getTime());
}
builder.append(')\\/"');
} else {
builder.append('null');
}
}
var plainObjectWithBuilder = function (plainObject, builder) {
builder.append('{');
var row = 0;
for (var item in plainObject) {
if (row++ > 0) {
builder.append(',');
}
stringWithBuilder(item, builder);
builder.append(':');
withBuilder(plainObject[item], builder);
}
builder.append('}');
}
var arrayWithBuilder = function (array, builder) {
if (array) {
builder.append('[');
if (array.length > 0) {
$.each(array, function (i, item) {
if (i > 0) {
builder.append(',');
}
withBuilder(item, builder);
});
}
builder.append(']');
} else {
builder.append('null');
}
}
var withBuilder = function (object, builder) {
builder = builder || new StringBuilder();
var type = $.type(object);
switch (type) {
case 'object':
if (object) {
if (jQuery.isPlainObject(object)) {
plainObjectWithBuilder(object, builder);
} else {
builder.append('null');
}
} else {
builder.append('null');
}
break;
case 'array':
arrayWithBuilder(object, builder);
break;
case 'number':
numberWithBuilder(object, builder);
break;
case 'string':
stringWithBuilder(object, builder);
break;
case 'date':
dateWithBuilder(object, builder);
break;
case 'boolean':
booleanWithBuilder(object, builder);
break;
default:
builder.append('null');
break;
}
}
withBuilder(object, stringBuilder);
return stringBuilder.toString();
}
JavaScriptSerializer.deserialize = function (data, secure) {
if (data == null || typeof data !== "string" || data.length === 0) {
return null;
}
var exp = data.replace(JavaScriptSerializer._dateRegEx, "$1new Date($2)");
try {
if (secure && JavaScriptSerializer._jsonRegEx.test(exp.replace(JavaScriptSerializer._jsonStringRegEx, ''))) {
throw null;
}
} catch (e) {
throw 'Cannot deserialize. The data does not correspond to valid JSON.';
}
return eval('(' + exp + ')');
}
JavaScript实现StringBuilder
StringBuilder = function (initialText) {
this._array = (typeof (initialText) !== 'undefined' && initialText !== null && initialText !== '') ? [initialText] : [];
this.append = function (text) {
this._array[this._array.length] = text;
}
this.appendLine = function (text) {
this._array[this._array.length] = ((typeof (text) === 'undefined') || (text === null) || (text === '')) ? '\r\n' : text + '\r\n';
}
this.clear = function (text) {
this._array = [];
}
this.isEmpty = function () {
return (this._array.length == 0 ? true : false);
}
this.toString = function (separator) {
separator = separator || ''
var array = this._array;
if (separator !== '') {
for (var i = 0; i < array.length; ) {
if ((typeof (array[i]) === 'undefined') || (array[i] === '') || (array[i] === null)) {
array.splice(i, 1);
}
else {
i++;
}
}
}
return array.join(separator);
}
this.indexOf = function (searchvalue) {
return this._array.indexOf(searchvalue);
}
this.contains = function (text) {
return this._array.contains(text);
}
}