Skip to content

Instantly share code, notes, and snippets.

@justqyx
Created September 23, 2013 06:13
Show Gist options
  • Save justqyx/6666962 to your computer and use it in GitHub Desktop.
Save justqyx/6666962 to your computer and use it in GitHub Desktop.
值得学习的 JS
var _hmt = _hmt || [];
$.ajaxSetup({
global: false,
type: 'POST',
dataType: 'json'
});
(function($) {
$.extend({
mask: {
open: function(options) {
var settings = $.extend({
title: '测试标题',
main: 'mask测试内容',
width: '530px',
close: function() {
$.mask.close();
}
}, options);
$('body').append('<div id="mask_bg">' + '</div>' + '<div id="mask_wrap">' + '<div id="mask_header" style="width:' + settings.width + ';">' + '<span id="msak_title">' + settings.title + '</span>' + '<a id="mask_close" class="js_mask_close" href="javascript:;"></a>' + '</div>' + '<div id="mask_main">' + settings.main + '</div>' + '</div>');
$('.js_mask_close').click(settings.close);
$(window).resize(this.position).resize();
$(document).one('keyup', function(e) {
if (e.keyCode == 27) {
settings.close();
};
});
},
close: function() {
$('#mask_bg').remove();
$('#mask_wrap').remove();
},
position: function() {
var obj = $('#mask_wrap');
obj.width($('#mask_content').width());
$('#mask_bg').height($('body').height());
obj.css({
'left': (document.documentElement.clientWidth - obj.width()) / 2,
'top': $(document).scrollTop() + (document.documentElement.clientHeight - obj.height()) / 2
});
}
},
prompt: {
loading: function(layout, change) {
var clone = layout.clone(true);
return {
start: function() {
layout.replaceWith(change);
},
end: function() {
change.replaceWith(clone);
}
};
},
auto: function(text) {
$('.js_prompt_auto').remove();
var obj = $('<span class="js_prompt_auto" style="position: fixed; z-index:9999; display: inline-block; background: #f7ed9f; border: 1px solid #fdceb0; height: 40px; line-height: 40px; padding: 0 10px; color: #625a1a;">' + text + '</span>');
$('body').append(obj);
obj.css({
'left': (document.documentElement.clientWidth - obj.width()) / 2,
'top': 85
});
setTimeout(function() {
obj.fadeOut(500);
}, 5000);
},
confirm: function(obj, text, callback) {
var _obj = $('<div class="mask_card_wrap mask_card_confirm"><div class="mask_card_icon"></div><div class="mask_card"><div class="mask_card_confirm_text">' + text + '</div><div class="mask_card_confirm_opera"><a class="link1 f12 js_mask_confirm_cancel" href="javascript:;">取消</a><a class="button5 ml5 js_mask_confirm_ok" href="javascript:;">确定</a></div></div></div>');
var set = {
width: obj.width(),
height: obj.height(),
top: obj.offset().top,
left: obj.offset().left,
scroll: $(document).scrollTop(),
position: function() {
if (set.top - $('.mask_card_confirm').height() > set.scroll + 70) {
$('.mask_card_confirm').css({
'z-index': 999,
'left': set.left - obj.width() / 2,
'top': set.top - $('.mask_card_confirm').height() - 10
}).addClass('bottom');
} else {
$('.mask_card_confirm').css({
'z-index': 999,
'left': set.left - obj.width() / 2,
'top': set.top + set.height + 10
}).addClass('top');
}
$('.mask_card_icon').css({
'left': obj.width() - 6
});
}
};
$('.mask_card_confirm').remove();
$('body').append(_obj);
set.position();
$('.js_mask_confirm_cancel').one('click', function() {
_obj.remove();
});
$('.js_mask_confirm_ok').one('click', function() {
if ($.isFunction(callback)) {
callback(obj);
_obj.remove();
}
});
}
}
});
})($);
(function($) {
$.fn.textSearch = function(str, options) {
var defaults = {
divFlag: true,
divStr: " ",
markClass: "",
markColor: "red",
nullReport: true,
callback: function() {
return false;
}
};
var sets = $.extend({}, defaults, options || {}),
clStr;
if (sets.markClass) {
clStr = "class='" + sets.markClass + "'";
} else {
clStr = "style='color:" + sets.markColor + ";'";
}
//对前一次高亮处理的文字还原
$("span[rel='mark']").each(function() {
var text = document.createTextNode($(this).text());
$(this).replaceWith($(text));
});
//字符串正则表达式关键字转化
$.regTrim = function(s) {
var imp = /[\^\.\\\|\(\)\*\+\-\$\[\]\?]/g;
var imp_c = {};
imp_c["^"] = "\\^";
imp_c["."] = "\\.";
imp_c["\\"] = "\\\\";
imp_c["|"] = "\\|";
imp_c["("] = "\\(";
imp_c[")"] = "\\)";
imp_c["*"] = "\\*";
imp_c["+"] = "\\+";
imp_c["-"] = "\\-";
imp_c["$"] = "\$";
imp_c["["] = "\\[";
imp_c["]"] = "\\]";
imp_c["?"] = "\\?";
s = s.replace(imp, function(o) {
return imp_c[o];
});
return s;
};
$(this).each(function() {
var t = $(this);
str = $.trim(str);
if (str === "") {
//alert("关键字为空");
return false;
} else {
//将关键字push到数组之中
var arr = [];
if (sets.divFlag) {
arr = str.split(sets.divStr);
} else {
arr.push(str);
}
}
var v_html = t.html();
//删除注释
v_html = v_html.replace(/<!--(?:.*)\-->/g, "");
//将HTML代码支离为HTML片段和文字片段,其中文字片段用于正则替换处理,而HTML片段置之不理
var tags = /[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a = v_html.match(tags),
test = 0;
$.each(a, function(i, c) {
if (!/<(?:.|\s)*?>/.test(c)) { //非标签
//开始执行替换
$.each(arr, function(index, con) {
if (con === "") {
return;
}
var reg = new RegExp($.regTrim(con), "g");
if (reg.test(c)) {
//正则替换
c = c.replace(reg, "♂" + con + "♀");
test = 1;
}
});
c = c.replace(/♂/g, "<span rel='mark' " + clStr + ">").replace(/♀/g, "</span>");
a[i] = c;
}
});
//将支离数组重新组成字符串
var new_html = a.join("");
$(this).html(new_html);
if (test === 0 && sets.nullReport) {
//alert("没有搜索结果");
return false;
}
//执行回调函数
sets.callback();
});
};
})(jQuery);
var Common = {
ajax: function(options) {
var defaultValue = {
type: 'POST',
url: '',
data: '',
dataType: 'json',
context: $(document),
beforeSend: function(obj) {},
success: function(data, obj) {},
complete: function(obj) {}
};
var setting = $.extend(defaultValue, options);
if (!setting.context.data('flag')) {
setting.context.data({
'flag': 'true'
});
}
if (setting.context.data('flag') == 'true') {
$.ajax({
type: setting.type,
url: Config['defaultUrl'] + setting.url,
data: setting.data,
dataType: setting.dataType,
context: setting.context,
beforeSend: function() {
setting.context.data({
'flag': 'false'
});
setting.beforeSend($(this));
},
success: function(data) {
setting.success(data, $(this));
},
complete: function() {
setting.context.data({
'flag': 'true'
});
setting.complete($(this));
}
});
}
},
layout: function(title, url, data) {
Common.ajax({
url: url,
data: data,
success: function(data, obj) {
$.mask.open({
title: title,
main: data['data']
});
}
});
},
getValue: function(text) {
var json = {};
var dom = $(text);
dom.each(function(i) {
var obj = dom.eq(i);
if (obj.attr('data-default-value') != dom.eq(i).val()) {
json[obj.attr('name')] = obj.val();
} else {
json[obj.attr('name')] = '';
};
});
return json;
},
searchTag: function(options, fn) {
$(document)
.on('keyup', '.js_search_tag', function(e) {
var data = Common.getValue('.js_default_value');
data['notin'] = new Array();
var notin = $('.js_tag_added');
for (var i = 0; i < notin.length; i++) {
data['notin'][i] = notin.eq(i).attr('data-tag-id');
};
data['levelin'] = options['levelin'];
data['limitnum'] = options['limitnum'];
data['pagenum'] = options['pagenum'];
var obj = $(this);
if (data['code'] != '' && e.keyCode != 38 && e.keyCode != 40 && e.keyCode != 13) {
$.ajax({
url: Config['defaultUrl'] + '/Tool/tool_search_stock_a',
data: data,
context: $(this),
success: function(data) {
if (data['status'] == 1) {
var html = '';
for (var k in data['data']) {
html += '<a href="javascript:;" data-tag-num="' + data['data'][k]['shownumberb'] + data['data'][k]['shownumber'] + '" data-tag-id="' + data['data'][k]['idstock'] + '" data-tag-name="' + data['data'][k]['showname'] + '" class="search_tag_result_list">' + data['data'][k]['showname'] + '(' + data['data'][k]['shownumberb'] + data['data'][k]['shownumber'] + ')</a>';
}
$(this).siblings('.search_tag_result').html(html).show();
$('.search_tag_result_list')
.off('click')
.on('click', function() {
fn($(this));
obj.val('').blur();
}).on('mouseover', function() {
$('.search_tag_result_list').removeClass('hover');
$(this).addClass('hover');
}).on('mouseout', function() {
$(this).removeClass('hover');
}).eq(0).mouseover();
} else {
$(this).siblings('.search_tag_result').html('<div class="pl20 pr20">' + data['info'] + '</div>').show();
}
}
});
} else if (data['code'] == '') {
$(this).siblings('.search_tag_result').html(' ').hide();
$(this).val('');
$('.js_rec_name').html(' ');
$('.js_rec_now').html(' ').attr('data-stock-id', '');
$('.js_rec_price').val('').blur();
} else if (e.keyCode == 38) {
var ind = $('.search_tag_result_list.hover').index();
if (ind == 0) {
$('.search_tag_result_list').eq($('.search_tag_result_list').length - 1).mouseover();
} else {
$('.search_tag_result_list').eq(ind - 1).mouseover();
};
} else if (e.keyCode == 40) {
var ind = $('.search_tag_result_list.hover').index();
if (ind == $('.search_tag_result_list').length - 1) {
$('.search_tag_result_list').eq(0).mouseover();
} else {
$('.search_tag_result_list').eq(ind + 1).mouseover();
};
} else if (e.keyCode == 13) {
$('.search_tag_result_list.hover').click();
};
})
.on('click', '.tag_del', function() {
$(this).parent('.js_tag_added').remove();
});
},
toDecimal2: function(x) {
var f = parseFloat(x);
if (isNaN(f)) {
return false;
}
var f = Math.round(x * 100) / 100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
},
page: function(options) {
var set = {
table: options.table,
num: options.prev.attr('data-num-min'),
min: options.prev.attr('data-num-min'),
max: options.next.attr('data-num-max'),
callback: options.callback,
size: function() {
if (set.num <= set.min) {
options.prev.addClass('ban');
} else {
options.prev.removeClass('ban');
}
if (set.num >= set.max) {
options.next.addClass('ban');
} else {
options.next.removeClass('ban');
}
}
};
set.size();
options.prev.click(function() {
if (!$(this).hasClass('ban')) {
set.num--;
set.callback($(this), {
'table': set.table,
'start': set.num
});
set.size();
}
});
options.next.click(function() {
if (!$(this).hasClass('ban')) {
set.num++;
set.callback($(this), {
'table': set.table,
'start': set.num
});
set.size();
}
});
},
cutStr: function(str, len) {
var l = 0;
for (var i = 0; i < str.length; i++) {
var strTemp = str.charAt(i);
if (strTemp.match(/[\x00-\x80]/)) {
l += 1;
} else {
l += 2;
};
};
if (l > len) {
return false;
} else {
return true;
}
},
contains: function(arr, text) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == text) {
return true;
};
};
return false;
},
upload: function(options) {
options.object.html('<div style="position: relative; background:#4D90FE ; width: 80px; border-radius: 3px;"><div style="color: #fff; height: 35px; line-height: 35px; border-radius: 3px; text-align: center;">上传文件</div><div style="overflow: hidden; position: absolute; top: 0; width: 80px; height: 35px; left: 0;"><form method="post" target="' + options.target + '" action="' + options.action + '" enctype="multipart/form-data"><input name="' + options.name + '" id="' + options.uploadpdf + '" type="file" onchange="this.parentNode.submit();" style="height: 35px; cursor: pointer; -moz-opacity:0;opacity:0;filter:alpha(opacity=0); position: absolute; left: -140px; "/></form></div><iframe name="' + options.target + '" width="0" height="0" frameborder="0" src="about:blank"></iframe></div>');
return $('#' + options.uploadpdf);
},
stringToJson: function(text) {
var data = {}, arr = text.split('&'),
i = 0,
j = 0;
for (; i < arr.length; i++) {
var _arr = arr[i].split('=');
if (_arr[1].indexOf(',') >= 0) {
var __arr = _arr[1].split(',');
data[_arr[0]] = [];
for (; j < __arr.length; j++) {
data[_arr[0]].push(__arr[j]);
};
} else {
data[_arr[0]] = _arr[1];
}
}
return data;
},
spell: function(obj1, obj2) {
var data = {};
for (var k in obj1) {
data[k] = obj1[k];
}
for (var k in obj2) {
data[k] = obj2[k];
}
return data;
},
moreSelect: function(options) {
var defaultValue = {
obj: '', //外层包裹对象
title: {}, //默认title
data: {}, //选择数据
flag: false, //是否有默认值
disabled: false //是否禁用
};
var setting = $.extend(defaultValue, options);
var html = '',
list = '';
for (var k in setting.data) {
list += '<li><label for="' + setting.data[k] + '"><input type="checkbox" id="' + setting.data[k] + '" value="' + k + '" />' + setting.data[k] + '</label></li>';
}
html = '<div class="common_select common_select_more" data-select-value=""><div class="common_select_show"><div class="common_select_text">' + setting.title + '</div><a class="common_select_button" href="javascript:;"></a></div><ul class="common_select_list">' + list + '</ul></div>';
$(setting.obj).html(html);
var $li = $(setting.obj + ' li'),
$input = $(setting.obj + ' li input'),
$label = $(setting.obj + ' li label'),
$show = $(setting.obj + ' .common_select_show'),
$text = $(setting.obj + ' .common_select_text'),
$sel = $(setting.obj + ' .common_select'),
$list = $(setting.obj + ' .common_select_list');
$show.click(function(e) {
if (setting.disabled == false) {
var obj = $(this).siblings('.common_select_list');
if (obj.is(':visible')) {
obj.hide();
} else {
$('.common_select_list').hide();
obj.show();
$(document).click(function(e) {
var flag = true;
for (var i = 0; i < $li.length; i++) {
if ($li.eq(i)[0] == e.target || $input.eq(i)[0] == e.target || $label.eq(i)[0] == e.target) {
flag = false;
}
}
if (flag == true) {
obj.hide();
}
});
e.stopPropagation();
}
}
});
$input.change(function() {
var check = $(setting.obj + ' li input:checked'),
len = check.length,
textArr = [],
idArr = [];
for (var i = 0; i < len; i++) {
textArr.push(check.eq(i).attr('id'));
idArr.push(check.eq(i).val());
}
if (len == 0) {
$text.html(setting.title).removeClass('select');
$sel.data({
'value': null
});
} else {
$text.html(textArr.join(',')).addClass('select');
$sel.data({
'value': idArr.join(',')
});
}
});
return function() {
if ($sel.data('value')) {
return $sel.data('value').split(',');
} else {
return '';
}
};
},
select: function(options) {
var defaultValue = {
obj: '', //外层包裹对象
show: {}, //显示title数据(默认显示)
data: {}, //选择数据
flag: false, //是否有默认值
disabled: false, //是否禁用
fn: function(obj) {} //选择列表时执行的回调函数
};
var setting = $.extend(defaultValue, options);
var html = '',
list = '';
if (setting.show['exit'] && setting.show['title']) {
list = '<li><a data-select-value="" href="javascript:;">' + setting.show['exit'] + '</a></li>';
for (var k in setting.data) {
list += '<li><a data-select-value="' + k + '" href="javascript:;">' + setting.data[k] + '</a></li>'
}
html = '<div class="common_select" data-select-value=""><div class="common_select_show"><div class="common_select_text">' + setting.show['title'] + '</div><a class="common_select_button" href="javascript:;"></a></div><ul class="common_select_list">' + list + '</ul></div>';
} else {
var cl0 = '',
cl1 = '';
if (setting.flag == false) {
cl1 = 'dis';
} else {
cl0 = 'select';
}
for (var k in setting.data) {
list += '<li><a data-select-value="' + k + '" href="javascript:;">' + setting.data[k] + '</a></li>'
}
for (var k in setting.show) {
html = '<div class="common_select" data-select-value="' + k + '"><div class="common_select_show"><div class="common_select_text ' + cl0 + '">' + setting.show[k] + '</div><a class="common_select_button ' + cl1 + '" href="javascript:;"></a></div><ul class="common_select_list">' + list + '</ul></div>'
}
}
$(setting.obj).html(html);
var $li = $(setting.obj + ' li'),
$show = $(setting.obj + ' .common_select_show'),
$a = $(setting.obj + ' li a'),
$text = $(setting.obj + ' .common_select_text'),
$sel = $(setting.obj + ' .common_select'),
$list = $(setting.obj + ' .common_select_list');
$li.eq(0).hide();
$show.click(function(e) {
if (setting.disabled == false) {
var obj = $(this).siblings('.common_select_list');
if (obj.is(':visible')) {
obj.hide();
} else {
$('.common_select_list').hide();
obj.show();
$(document).click(function(e) {
var flag = true;
for (var i = 0; i < $a.length; i++) {
if ($a.eq(i)[0] == e.target) {
flag = false;
}
}
if (flag == true) {
obj.hide();
}
});
e.stopPropagation();
}
}
});
$a.click(function() {
if (setting.show['title'] && $(this).parent('li').index() == 0) {
$text.removeClass('select');
$text.html(setting.show['title']);
} else {
$text.addClass('select');
$text.html($(this).html());
}
$li.show();
$(this).parent('li').hide();
$sel.attr('data-select-value', $(this).attr('data-select-value'));
$list.hide();
if (setting.fn) {
setting.fn($(this));
}
});
return function() {
return $sel.attr('data-select-value');
};
},
tag: function(options) {
var stock = '',
delStock = function() {
$(options.obj + ' .common_tag_del').click(function() {
$(this).parent('span').remove();
$(options.obj + ' input').val('').focus();
});
};
for (var k in options.stock) {
stock += '<span class="common_tag" data-tag-id="' + k + '"><a class="common_tag_name">' + options.stock[k] + '</a><a href="javascript:;" class="common_tag_del">×</a></span>'
};
$(options.obj).html('<div class="common_tag_wrap clearfix">' + stock + '<div class="common_tag_search"><input class="js_default_value" type="text" name="' + options.name + '" value="' + options.defaultValue + '" data-default-value="' + options.defaultValue + '" /><div class="common_tag_list"></div></div></div>');
$('.common_tag_search input').keyup(function(e) {
var val = $(this).val();
options.data['notin'] = new Array();
var notin = $(options.obj + ' .common_tag_wrap').children('span');
for (var i = 0; i < notin.length; i++) {
options.data['notin'][i] = notin.eq(i).attr('data-tag-id');
};
if (val != '' && e.keyCode != 38 && e.keyCode != 40 && e.keyCode != 13) {
options.data[$(this).attr('name')] = val;
Common.ajax({
url: options.url,
data: options.data,
context: $(this),
success: function(data, obj) {
if (data['status'] == 1) {
obj.siblings('.common_tag_list').html(options.html(data)).show();
$(options.obj + ' .common_tag_list a').click(function() {
if ($(options.obj + ' .common_tag_wrap span').length >= options.length) {
$.prompt.auto('最多添加' + options.length + '个');
} else {
$(options.obj + ' .common_tag_search').before('<span data-tag-id="' + $(this).attr('data-tag-id') + '" class="common_tag"><a class="common_tag_name">' + $(this).attr('data-tag-name') + '</a><a class="common_tag_del" href="javascript:;">×</a></span>');
}
$(options.obj + ' .common_tag_list').html('').hide();
$(options.obj + ' input').val('').focus();
delStock();
}).mouseover(function() {
$(this).addClass('hover').siblings('a').removeClass('hover');
});
$(options.obj + ' .common_tag_list a:first').mouseover();
} else {
obj.siblings('.common_tag_list').html('<div class="pl20 pr20">' + data['info'] + '</div>').show();
}
}
});
} else if (val == '') {
$(this).siblings('.common_tag_list').html('').hide();
$(this).val('');
} else if (e.keyCode == 38) {
var objHover = $(options.obj + ' .common_tag_list a.hover').index();
if (objHover == 0) {
$(options.obj + ' .common_tag_list a:last').mouseover().siblings('a').mouseout();
} else {
$(options.obj + ' .common_tag_list a').eq(objHover - 1).mouseover().siblings('a').mouseout();
}
} else if (e.keyCode == 40) {
var objHover = $(options.obj + ' .common_tag_list a.hover').index();
var obj = $(options.obj + ' .common_tag_list a');
if (objHover == obj.length - 1) {
$(options.obj + ' .common_tag_list a:first').mouseover().siblings('a').mouseout();
} else {
$(options.obj + ' .common_tag_list a').eq(objHover + 1).mouseover().siblings('a').mouseout();
}
} else if (e.keyCode == 13) {
$(options.obj + ' .common_tag_list a.hover').click();
}
}).keydown(function(e) {
if (e.keyCode == 8 && $(this).val() == '') {
var notin = $(options.obj + ' .common_tag_wrap').children('span');
notin.eq(notin.length - 1).remove();
}
});
delStock();
return function() {
var arr = [];
var notin = $(options.obj + ' .common_tag_wrap').children('span');
for (var i = 0; i < notin.length; i++) {
arr.push(notin.eq(i).attr('data-tag-id'));
};
return arr;
}
},
checkbox: function(obj) {
return function() {
var arr = [];
var inp = $(obj + ' input');
for (var i = 0; i < inp.length; i++) {
if (inp.eq(i)[0].checked) {
arr.push(inp.eq(i).val());
}
}
return arr;
}
},
sina: function(obj, cl) {
$(obj).html('<span class="fl" style="margin-top: 2px;">同时分享到微博</span><a class="share_sina_icon ' + cl + ' fl" href="javascript:;"></a><form id="form" action="' + Config['defaultUrl'] + '/Pointview/sinadev_a" style="display: none;" method="get" target="_blank"></form>')
$('.share_sina_icon').click(function() {
Common.ajax({
url: '/Pointview/if_sinadev_a',
success: function(data, obj) {
if (data['status'] == 1) {
if ($('.share_sina_icon').hasClass('select')) {
$('.share_sina_icon').removeClass('select');
} else {
$('.share_sina_icon').addClass('select');
}
} else {
$('#form').submit();
}
}
});
});
return function() {
if ($('.share_sina_icon').hasClass('select')) {
return 1;
} else {
return 0;
}
}
},
isEmail: function(text) {
return /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/.test(text);
},
api: function(url) {
window.open(url, null, 'height=500, width=600');
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment