最後更新於2019年1月13日
前端經常使用代碼片斷(一) 點這裏
前端經常使用代碼片斷(二) 點這裏
前端經常使用代碼片斷(三) 點這裏
前端經常使用代碼片斷(四) 點這裏
前端經常使用代碼片斷(五) 點這裏
前端經常使用代碼片斷(六) 點這裏javascript
大部分須要引入 jquery-1.9.1.min.js(兼容ie8)
$(function(){ $('#username').focus(); //回車查詢 document.onkeydown = function(event) { var e = event || window.event || arguments.callee.caller.arguments[0]; if (e && e.keyCode == 13) { $("#signIn").trigger('click'); } }; });
/** * 把對象格式的參數轉成鍵值對,並以&分割 * @param arr 要轉換的對象參數 * @returns {string} */ function maiyaBuildParam(arr){ var result = ''; for(var key in arr) { result += key + "=" + encodeURIComponent(arr[key]) + "&"; } result = result.substr(0,result.length-1); return result; }
function submitForm() { var param = { userName: $.trim($("#username").val()), password: $.trim($("#password").val()) //userName: $("#username").val().trim(), //password: $("#password").val().trim() //ie8下邊支持$.trim, 不支持$("#").val().trim() }; $.ajax({ type: "post", url: serverIp + "rest/login?" + Math.random() + "&" + BuildParam(param), //這裏傳入一個隨機數避免ie8緩存問題,下邊cache對ie8無效 //data: JSON.stringify(param), //傳入組裝的參數 //contentType: "application/json; charset=utf-8", cache: false, //禁用緩存 dataType: "json", success: function (result) { if(result.result_code === '1'){ $.cookie('userinfo', JSON.stringify(result.data), { expires: 7 }); window.location.href = "index.html"; }else{ alert('用戶名或密碼錯誤'); } }, error: function(msg) { alert(msg.message || '操做失敗!'); } }) }
//設置cookie比,並將json數據源轉成string $.cookie('userinfo', JSON.stringify(json), { expires: 7 }); //獲取cookie,並將返回的string格式數據解析成json JSON.parse($.cookie('userinfo')); //清除cookie $.cookie('userinfo',null);
項目示例css
//設置cookie $.ajax({ type: "post", url: serverIp + "rest/login?" + Math.random() + "&" + maiyaBuildParam(param), dataType: "json", success: function (result) { if(result.result_code === '1'){ $.cookie('userinfo', JSON.stringify(result.data), { expires: 7 }); window.location.href = "index.html"; }else{ alert('用戶名或密碼錯誤'); } }, error: function(msg) { alert(msg.message || '操做失敗!'); } })
//獲取和清空cookie if(!$.cookie('userinfo')) { location.href="login.html"; } $("#loginOut a").click(function () { $.cookie('userinfo',null); }); var userinfo = JSON.parse($.cookie('userinfo')); if(userinfo) { var _src = userinfo.docPic ? userinfo.docPic : (userinfo.docSex == 2 ? 'images/women.png' : 'images/man.png'); $('#userInfoImage').attr("src",_src) $('#username,#leftusername').html(userinfo.docName); $('#jobtitle').html(userinfo.docProfe); var docRole = userinfo.docRole == 0 && '醫師' || '管理員'; $('#loginuser').html(docRole); } if(userinfo.docRole == 0) { $('#menu-product').show(); $('#menu-admin,#menu-tongji').hide(); } else if(userinfo.docRole == 1) { $('#menu-product').hide(); $('#menu-admin,#menu-tongji').show(); }
說明:
jquery.cookie.js 只容許開發人員存入字符串,故用JSON.stringify(json)將json轉換成stringhtml
補充:JSON.stringify與JSON.parse() [ 此類方法在低版本ie上須要引入json2.js ]前端
parse用於從一個字符串中解析出json對象,如 var str = '{"name":"huangxiaojian","age":"23"}' JSON.parse(str) --> Object age: "23" name: "huangxiaojian" __proto__: Object 注意:單引號寫在{}外,每一個屬性名都必須用雙引號,不然會拋出異常。 stringify()用於從一個對象解析出字符串,如 var a = {a:1,b:2} JSON.stringify(a) ---> 結果:"{"a":1,"b":2}"
var docRole = userinfo.docRole == 0 && '醫師' || '管理員'; var _src = userinfo.docPic ? userinfo.docPic : (userinfo.docSex == 2 ? 'images/women.png' : 'images/man.png'); 記得之前看過別人寫的文章裏提到有網易的面試題出現過區分 || &&聯合使用時返回的結果,當時老記不住,如今有這個應該容易記了
使用方式java
new Date().format('yyyy-MM-dd'); // "2017-02-18" new Date().format('yyyy-MM-dd hh-mm-ss'); // "2017-02-18 04-41-08" new Date().format('yyyy-MM-dd hh/mm/ss'); // "2017-02-18 04/41/18" new Date().format('yyyy-MM-dd HH/mm/ss'); // "2017-02-18 16/42/30" new Date().format('yyyy-MM-dd E HH/mm/ss'); //"2017-02-18 六 16/51/16" new Date().format('yyyy-MM-dd EE HH/mm/ss'); // "2017-02-18 週六 16/51/30" new Date().format('yyyy-MM-dd EEE HH/mm/ss'); // "2017-02-18 星期六 16/51/77"
源碼jquery
Date.prototype.format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //12小時 "H+": this.getHours(), //24小時 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; var week = { "0": "日", "1": "一", "2": "二", "3": "三", "4": "四", "5": "五", "6": "六" }; if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); } if (/(E+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "星期" : "周") : "") + week[this.getDay() + ""]); } for (var k in o) { if (new RegExp("(" + k + ")").test(fmt)) { fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); } } return fmt; }
使用方式面試
new Date(); //Sat Feb 18 2017 17:35:25 GMT+0800 (中國標準時間) getMonday( new Date(),-1); // Mon Feb 06 2017 17:40:45 GMT+0800 (中國標準時間) getMonday( new Date()); //Mon Feb 13 2017 17:34:34 GMT+0800 (中國標準時間) getMonday( new Date(),1); // Mon Feb 20 2017 17:34:43 GMT+0800 (中國標準時間)
源碼ajax
function getMonday(date, offset){ var today=date || new Date(); return new Date( today - ((today.getDay() ||7) -1 - (offset||0) *7 ) *864E5 ); } //改進,獲取輸入日期所在周或者先後某周的任意某天 function getWeekAnyday(weekday,offset,date){ var today=date || new Date(); return new Date( today - ((today.getDay() ||7) -(weekday||0) - (offset||0) *7 ) *864E5 ); }
使用方式正則表達式
new Date(); //Sat Feb 18 2017 17:35:25 GMT+0800 (中國標準時間) getOneDayByDate(new Date() ,-2); //Thu Feb 16 2017 18:20:39 GMT+0800 (中國標準時間) getOneDayByDate(new Date() ,2); //Mon Feb 20 2017 18:20:49 GMT+0800 (中國標準時間)
源碼json
function getOneDayByDate(date, n) { var d = typeof date == 'string' && new Date(date) || date; d.setTime(d.getTime()+24*60*60*1000*n); //return d.getFullYear()+"-" + (d.getMonth()+1) + "-" + d.getDate(); //用於獲取"2017-2-16"格式日期 return new Date(d); }
首先引入js
<script src="../My97DatePicker/WdatePicker.js"></script>
場景1:選擇時間段,前者不能大於後者的時間,後者不能小於前者時間且不大於當天時間
<input type="text" onfocus="WdatePicker({maxDate:'#F{$dp.$D(\'datemax\')||\'%y-%M-%d\'}'})" id="datemin" class="input-text"> - <input type="text" onfocus="WdatePicker({minDate:'#F{$dp.$D(\'datemin\')}',maxDate:'%y-%M-%d'})" id="datemax" class="input-text">
給input賦相差一個星期的初始值
$("#datemin").val(getOneDayByDate(new Date(), -6).format('yyyy-MM-dd')); $("#datemax").val(thisDate()); function thisDate() { var d = new Date(); return d.format('yyyy-MM-dd'); }
//刷新當前頁面 location.reload(); //若是把該方法的參數設置爲 true,那麼不管文檔的最後修改日期是什麼,它都會繞過緩存,從服務器上從新下載該文檔。這與用戶在單擊瀏覽器的刷新按鈕時按住 Shift 健的效果是徹底同樣。
這是原生的方法
js方法
var arr = [1, 2, 3]; // js arr.indexOf(3) var result1 = arr.indexOf(3); //返回index爲2
jquery方法
var arr = [1, 2, 3]; // jquery $.inArray(3, arr) var result = $.inArray(3, arr); //返回index爲2
自定義方法
var arr = [1, 2, 3]; // 自定義 contains(arr, 3)方法 function contains(arr, obj) { //while var i = arr.length; while(i--) { if(arr[i] === obj) { return i; } } return -1; } var result1 = contains(arr, 3); //返回index爲2
描述:解析ajax get方式傳遞的參數,
例如「https://www.zybuluo.com/mdedi...://www.zybuluo.com/static/editor/md-help.markdown」
使用方式
$.getUrlParam('url'); //"https://www.zybuluo.com/static/editor/md-help.markdown"
源碼
$.getUrlParam = function(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = decodeURIComponent(window.location.search).substr(1).match(reg); if (r!=null) return unescape(r[2]); return null; };
說明:此方式是將方法拓展到了jquery,也能夠定義成方法
使用方式
getUrlParam('url'); //"https://www.zybuluo.com/static/editor/md-help.markdown"
function getUrlParam(name) { var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); var r = decodeURIComponent(window.location.search).substr(1).match(reg); if (r!=null) return unescape(r[2]); return null; };
使用方式
var urlParamsToJson= getUrlParamsToJson(); //Object {url: "https://www.zybuluo.com/static/editor/md-help.markdown"}
源碼
function getUrlParamsToJson() { var url = location.href; var nameValue; var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&"); var paraObj = {}; for (var i = 0; nameValue = paraString[i]; i++) { var name = nameValue.substring(0, nameValue.indexOf("=")).toLowerCase(); var value = nameValue.substring(nameValue.indexOf("=") + 1, nameValue.length); if (value.indexOf("#") > -1) { value = value.split("#")[0]; } paraObj[name] = value; } return paraObj; };
html
<ul id="Huifold1" class="Huifold"> <li class="item"> <h4>標題<b>+</b></h4> <div class="info"> 內容<br>不少內容 </div> </li> <li class="item"> <h4>標題<b>+</b></h4> <div class="info"><img src="pic/2.png" ></div> </li> <li class="item"> <h4>標題<b>+</b></h4> <div class="info"><img src="pic/1.png" ></div> </li> </ul>
css
.Huifold .item{ position:relative} .Huifold .item h4{margin:0;font-weight:bold;position:relative;border-top: 1px solid #fff;font-size:15px;line-height:22px;padding:7px 10px;background-color:#eee;cursor:pointer;padding-right:30px} .Huifold .item h4 b{position:absolute;display: block; cursor:pointer;right:10px;top:7px;width:16px;height:16px; text-align:center; color:#666} .Huifold .item .info{display:none;padding:10px}
js
jQuery.Huifold = function (obj, obj_c, speed, obj_type, Event,selected) { /*5個參數順序不可打亂,分別是:相應區,隱藏顯示的內容,速度,類型,事件*/ //1 只打開一個,能夠所有關閉 //2 必須有一個打開 //3 可打開多個 //4所有打開 var selected = selected ||"selected"; if (obj_type == 2) { $(obj + ":first").find("b").html("-"); $(obj_c + ":first").show(); } if (obj_type == 4) { $(obj).find("b").html("-"); $(obj_c).show(); } if (obj_type == 5) { $(obj).find("b").html("-"); $(obj_c).hide(); } $(obj).on(Event, function () { // console.log("11111"); if ($(this).next().is(":visible")) { if (obj_type == 2) { return false; } else { $(this).next().slideUp(speed).end().removeClass(selected); $(this).find("b").html("+"); } } else { if (obj_type == 3 || obj_type == 4) { $(this).next().slideDown(speed).end().addClass(selected); $(this).find("b").html("-"); } else { $(obj_c).slideUp(speed); $(obj).removeClass(selected); $(obj).find("b").html("+"); $(this).next().slideDown(speed).end().addClass(selected); $(this).find("b").html("-"); } } }); };
調用
$(function(){ $.Huifold("#mealContainer>.item>.title", "#mealContainer>.item>.info", "fast", 4, "click"); });
html
<div id="tab_demo" class="HuiTab"> <div class="tabBar clearfix"><span>選項卡一</span><span>選項卡二</span><span>自適應寬度</span></div> <div class="tabCon">內容一</div> <div class="tabCon">內容二</div> <div class="tabCon">內容三</div> </div>
css
.clearfix:after{content:"\20";display:block;height:0;clear:both;visibility:hidden}.clearfix{zoom:1} .tabBar {border-bottom: 2px solid #222} .tabBar span {background-color: #e8e8e8;cursor: pointer;display: inline-block;float: left;font-weight: bold;height: 30px;line-height: 30px;padding: 0 15px} .tabBar span.current{background-color: #222;color: #fff} .tabCon {display: none}
js
jQuery.Huitab = function (tabBar, tabCon, class_name, tabEvent, i, callback) { var $tab_menu = $(tabBar); // 錕斤拷始錕斤拷錕斤拷錕斤拷 $tab_menu.removeClass(class_name); $(tabBar).eq(i).addClass(class_name); $(tabCon).hide(); $(tabCon).eq(i).show(); callback && callback(i); $tab_menu.on(tabEvent, function (event) { $tab_menu.removeClass(class_name); $(this).addClass(class_name); var index = $tab_menu.index(this).toString(); $(tabCon).hide(); $(tabCon).eq(index).show(); callback && callback(index); event.stopPropagation(); }); };
調用
$(function(){ $.Huitab("#tabbarSonFirst>.tabBar span", "#tabbarSonFirst>.tabCon", "current", "click", "0", loadChart); }); // #tabbarSonFirst 父級id // #tabbarSonFirst>.tabBar span控制條 // #tabbarSonFirst>.tabCon內容區 // current 選中tab樣式 // click 事件 點擊切換,能夠換成mousemove 移動鼠標切換 // 1 默認第2個tab爲當前狀態(從0開始) // callback 實現選中後再加載函數 function loadChart(i) { switch (i) { case '0' loopSportData(); break; case '1' loopMealData(); break; case '2': loadBloodPressureChart(); break; default: break; } }
var reg = /^.*\.(?:xls|xlsx)$/i;//文件名能夠帶空格 if (!reg.test(path)) {//校驗不經過 alert("請上傳excel格式的文件!"); return; }
$pattern = '/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/'; 分開來註釋一下: ^ 匹配一行的開頭位置 (?![0-9]+$) 預測該位置後面不全是數字 (?![a-zA-Z]+$) 預測該位置後面不全是字母 [0-9A-Za-z] {6,10} 由6-10位數字或這字母組成 $ 匹配行結尾位置
只須要添加一下代碼,在須要的地方調用checkBind();
就能夠了
function checkBind() { if (!Function.prototype.bind) { Function.prototype.bind = function(oThis) { if (typeof this !== "function") { throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); } var aArgs = Array.prototype.slice.call(arguments, 1), fToBind = this, fNOP = function() {}, fBound = function() { return fToBind.apply(this instanceof fNOP && oThis ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); }; fNOP.prototype = this.prototype; fBound.prototype = new fNOP(); return fBound; }; } }
來源:張鑫旭的博客文章
樣式:
JS代碼: var titleInit = document.title, isShine = true; setInterval(function() { var title = document.title; if (isShine == true) { if (/新/.test(title) == false) { document.title = '【你有新消息】'; } else { document.title = '【 】'; } } else { document.title = titleInit; } }, 500); window.onfocus = function() { isShine = false; }; window.onblur = function() { isShine = true; }; // for IE document.onfocusin = function() { isShine = false; }; document.onfocusout = function() { isShine = true; };
<div id="box"> <img src="images/demo.jpg" alt="" /> </div>
#box{ width:500px;height:400px; text-align:center; border:1px solid #d3d3d3;background:#fff; display: table-cell; vertical-align:middle; } #box img{ vertical-align:middle; }
使用javascript的decodeURIComponent函數解碼查詢字符串時,處理不了"+",例以下面
這裏須要再作一下處理:
decodeURIComponent(str.replace(/\+/g, '%20'));
即在調用decodeURIComponent函數以前要先把+替換爲%20,這樣就沒有問題了