常用Javascript函數(shù)與原型功能收藏(必看篇)
更新時間:2016年10月09日 19:45:55 投稿:jingxian
下面小編就為大家?guī)硪黄S肑avascript函數(shù)與原型功能收藏(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
如下所示:
// 重復(fù)字符串 String.prototype.repeat = function(n) { return new Array(n+1).join(this); } // 替換全部 String.prototype.replaceAll = function(str1, str2) { return this.replace(new RegExp(str1, "gm"), str2); } // 清除空格 String.prototype.trim = function() { return this.replace(/^\s*(.*?)\s+$/, "$1"); } // 計算數(shù)組中的最大值 Array.prototype.max = function() { return Math.max.apply({}, this); } // 計算數(shù)組中的最小值 Array.prototype.min = function() { return Math.min.apply({}, this); } // 復(fù)制數(shù)組 Array.prototype.copy = function() { return [].concat(this); }; // 去除數(shù)組中指定元素,只能去除一個,如果想多個,之前先用unique處理 Array.prototype.remove = function(value){ for (var i = 0, len = this.length; i < len; i++) { if (this[i] == value) { this.splice(i, 1); break; } } return this; } // 判斷數(shù)組中是否存在指定元素,返回索引值 Array.prototype.inArray = function(value) { var index = -1, key; for (key in this) { if (this[key] == value) { index = key; break; } } return index; } // 去除數(shù)組中的重復(fù)元素 Array.prototype.unique = function() { var key, ret = []; for (key in this) { if (ret.inArray(this[key]) < 0) { ret.push(this[key]); } } return ret; } // 檢測是否已經(jīng)安裝flash,檢測flash的版本 var flashVersion = (function() { var version; try { version = navigator.plugins['Shockwave Flash']; version = version.description; } catch (ex) { try { version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash') .GetVariable('$version'); } catch (ex2) { version = '0.0'; } } version = version.match(/\d+/g); return parseFloat(version[0] + '.' + version[1], 10); })(); // 檢測是否支持transition var supportTransition = (function() { var s = document.createElement('p').style, r = 'transition' in s || 'WebkitTransition' in s || 'MozTransition' in s || 'msTransition' in s || 'OTransition' in s; s = null; return r; })(); // 判斷瀏覽器是否支持圖片的base64 var isSupportBase64 = (function() { var data = new Image(); var support = true; data.onload = data.onerror = function() { if (this.width != 1 || this.height != 1) { support = false; } return support; }; data.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="; })(); // 首字母大寫 function ucfirst(str) { return str.charAt(0).toUpperCase() + str.slice(1); } // 清除左空格 function ltrim(str) { return str.replace(/^(\s*| *)/, ""); } // 清除右空格 function rtrim(str) { return str.replace(/(\s*| *)$/, ""); } // 設(shè)置Cookie值 function setCookie(name, value, hours, path, domain) { var d = new Date(); var offset = 8; var utc = d.getTime() + (d.getTimezoneOffset() * 60000); var nd = utc + (3600000 * offset); var expire = new Date(nd); expire.setTime(expire.getTime() + hours * 60 * 60 * 1000); var path = path || ""; var domain = domain || ""; document.cookie = name + "=" + escape(value) + ";path="+ path +";expires=" + expire.toGMTString() + ";domain="+ domain +";" } // 獲取Cookie值 function getCookie(name) { var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) { return unescape(arr[2]); } return null; } // 刪除Cookie值 function removeCookie(name) { setCookie(name, "", -1); } // 生成范圍隨機(jī)數(shù) function rand(n, m) { return Math.random() * (m - n) + n; } // 加入收藏夾 function addFavorite(url, title) { try { window.external.addFavorite(url, title); } catch(e) { try { window.sidebar.addPanel(title, url, ""); } catch(e) { alert("加入收藏失敗,請使用Ctrl+D進(jìn)行添加"); } } } // 設(shè)為首頁 function setHomepage(url) { if (document.all) { document.body.style.behavior = 'url(#default#homepage)'; document.body.setHomePage(url); } else if (window.sidebar) { if (window.netscape) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch(e) { alert("該操作被瀏覽器拒絕,如果想啟用該功能,請在地址欄內(nèi)輸入 about:config,然后將項 signed.applets.codebase_principal_support 值該為true"); } } var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch); prefs.setCharPref('browser.startup.homepage', url); } } // 加載樣式文件 function loadStyle(url) { try { document.createStyleSheet(url); } catch(e) { var cssLink = document.createElement('link'); cssLink.rel = 'stylesheet'; cssLink.type = 'text/css'; cssLink.href = url; var head = document.getElementsByTagName('head')[0]; head.appendChild(cssLink) } } // 清除腳本內(nèi)容 function stripscript(str) { return str.replace(/<script.*?>.*?<\/script>/ig, ''); } // 檢驗URL鏈接是否有效 function getUrlState(url) { var xmlhttp = new ActiveXObject("microsoft.xmlhttp"); xmlhttp.open("GET", url, false); try { xmlhttp.send(); } catch(e) { } finally { var result = xmlhttp.responseText; if (result) { if (xmlhttp.status == 200) { return true; } else { return false; } } else { return false; } } } // 格式化CSS代碼 function formatCss(str){ str = str.replace(/\s*([\{\}\:\;\,])\s*/g, "$1"); str = str.replace(/;\s*;/g, ";"); //清除連續(xù)分號 str = str.replace(/\,[\s\.\#\d]*{/g, "{"); str = str.replace(/([^\s])\{([^\s])/g, "$1 {\n\t$2"); str = str.replace(/([^\s])\}([^\n]*)/g, "$1\n}\n$2"); str = str.replace(/([^\s]);([^\s\}])/g, "$1;\n\t$2"); return str; } // 壓縮CSS代碼 function compressCss (str) { str = str.replace(/\/\*(.|\n)*?\*\//g, ""); //刪除注釋 str = str.replace(/\s*([\{\}\:\;\,])\s*/g, "$1"); str = str.replace(/\,[\s\.\#\d]*\{/g, "{"); //容錯處理 str = str.replace(/;\s*;/g, ";"); //清除連續(xù)分號 str = str.match(/^\s*(\S+(\s+\S+)*)\s*$/); //去掉首尾空白 return (str == null) ? "" : s[1]; } // getElementsByClassName function getElementsByClassName(name, context) { var context = context || document; if (context.getElementsByClassName) { return context.getElementsByClassName(name); } var nodes = context.getElementsByTagName("*"), nodesLength = nodes.length, ret = []; for (var i = 0; i < nodesLength; i++) { var className = nodes[i].className; if (nodes[i].nodeType == 1 && className) { var classes = className.split(' '); for (var j = 0; j < classes.length; j++) { if (name == classes[j]) { ret.push(nodes[i]); break } } } } return ret; } // 獲取頁面高度 function getPageHeight() { var doc = document; var rot = doc.compatMode == "BackCompat" ? doc.body : doc.documentElement; return Math.max(doc.documentElement.scrollHeight, doc.body.scrollHeight, rot.clientHeight); } // 獲取頁面scrollLeft function getPageScrollLeft() { var doc = document; return doc.documentElement.scrollLeft || doc.body.scrollLeft; } // 獲取頁面可視寬度 function getPageViewWidth() { var doc = document; var rot = doc.compatMode == "BackCompat" ? doc.body : doc.documentElement; return rot.clientWidth; } // 獲取頁面寬度 function getPageWidth(){ var doc = document; var rot = doc.compatMode == "BackCompat" ? doc.body : doc.documentElement; return Math.max(doc.documentElement.scrollWidth, doc.body.scrollWidth, rot.clientWidth); } // 獲取頁面scrollTop function getPageScrollTop(){ var doc = document; return doc.documentElement.scrollTop || doc.body.scrollTop; } // 獲取頁面可視高度 function getPageViewHeight() { var doc = document; var rot = doc.compatMode == "BackCompat" ? doc.body : doc.documentElement; return rot.clientHeight; } // 獲取網(wǎng)頁被卷去的位置 function getScrollXY() { return document.body.scrollTop ? { x : document.body.scrollLeft, y : document.body.scrollTop } : { x : document.documentElement.scrollLeft, y : document.documentElement.scrollTop } } // 獲取元素的樣式值 function getStyle(elem, name) { if (elem.style[name]) { return elem.style[name]; } else if (elem.currentStyle) { return elem.currentStyle[name]; } else if (document.defaultView && document.defaultView.getComputedStyle) { var s = document.defaultView.getComputedStyle(elem, ""); return s && s.getPropertyValue(name); } else { return null; } } // 獲取元素相對于這個頁面的X坐標(biāo) function pageX(elem) { return elem.offsetParent ? (elem.offsetLeft + pageX(elem.offsetParent)) : elem.offsetLeft; } // 獲取元素相對于這個頁面的Y坐標(biāo) function pageY(elem) { return elem.offsetParent ? (elem.offsetTop + pageY(elem.offsetParent)) : elem.offsetTop; } // 獲取元素相對于父元素的X坐標(biāo) function parentX(elem) { return elem.parentNode == elem.offsetParent ? elem.offsetLeft : pageX(elem) - pageX(elem.parentNode); } // 獲取元素相對于父元素的Y坐標(biāo) function parentY(elem) { return elem.parentNode == elem.offsetParent ? elem.offsetTop : pageY(elem)-pageY(elem.parentNode); } // 獲取使用CSS定位的元素的X坐標(biāo) function posX(elem) { return parseInt(getStyle(elem, "left")); } // 獲取使用CSS定位的元素的Y坐標(biāo) function posY(elem) { return parseInt(getStyle(elem, "top")); } // 設(shè)置元素X位置 function setX(elem, pos) { elem.style.left = pos + "px"; } // 設(shè)置元素Y位置 function setY(elem, pos) { elem.style.top = pos + "px"; } // 增加元素X坐標(biāo) function addX(elem, pos) { set(elem, (posX(elem) + pos)); } // 增加元素Y坐標(biāo) function addY(elem, pos) { set(elem, (posY(elem) + pos)); } // 獲取元素使用CSS控制大小的高度 function getHeight(elem) { return parseInt(getStyle(elem, "height")); } // 獲取元素使用CSS控制大小的寬度 function getWidth(elem) { return parseInt(getStyle(elem, "width")); } // 設(shè)置透明度 function setOpacity(elem, num) { if (elem.filters) { elem.style.filter="alpha(opacity="+ num +")"; } else { elem.style.opacity = num/100; } } // 獲取鼠標(biāo)光標(biāo)相對于整個頁面的X位置 function getX(e) { e = e || window.event; return e.pageX || e.clientX + document.body.scrollLeft; } // 獲取鼠標(biāo)光標(biāo)相對于整個頁面的Y位置 function getY(e) { e = e || window.event; return e.pageY || e.clientY + document.body.scrollTop; } // 獲取鼠標(biāo)光標(biāo)相對于當(dāng)前元素的X位置 function getElementX(e) { return (e && e.layerX) || window.event.offsetX; } // 獲取鼠標(biāo)光標(biāo)相對于當(dāng)前元素的Y位置 function getElementY(e) { return (e && e.layerY) || window.event.offsetY; } // 獲取滾動條的X位置 function scrollX() { var de = document.documentElement; return self.pageXOffset || (de && de.scrollLeft) || document.body.scrollLeft; } // 獲取滾動條的Y位置 function scrollY() { var de = document.documentElement; return self.pageYOffset || (de && de.scrollTop) || document.body.scrollTop; } // 確認(rèn)是否鍵盤有效輸入值 function checkKey(iKey) { if (iKey == 32 || iKey == 229) {return true;} /*空格和異常*/ if (iKey>47 && iKey < 58) {return true;} /*數(shù)字*/ if (iKey>64 && iKey < 91) {return true;} /*字母*/ if (iKey>95 && iKey < 108) {return true;} /*數(shù)字鍵盤1*/ if (iKey>108 && iKey < 112) {return true;} /*數(shù)字鍵盤2*/ if (iKey>185 && iKey < 193) {return true;} /*符號1*/ if (iKey>218 && iKey < 223) {return true;} /*符號2*/ return false; } // 獲得URL中GET參數(shù)值 function getParams() { var queryStr = window.location.href.split("?"); var params = []; if (queryStr[1]) { var gets = queryStr[1].split("&"); for (var i = 0; i < gets.length; i++) { temp = gets.split("="); params[temp[0]] = temp[1]; } } return params; } // 字符串反序 function strReverse(text) { return text.split('').reverse().join(''); } // HTML實體 function htmlEncode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/\&/g, "&"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/\'/g, "'"); s = s.replace(/\"/g, "&qout;"); return s; } // HTML還原 function htmlDecode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/&/g, "&"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/'/g, "\'"); s = s.replace(/&qout;/g, "\""); return s; } // 克隆 function clone(obj) { var ret; switch (typeof obj) { case 'undefined': break; case 'string': ret = obj + ''; break; case 'number': ret = obj - 0; break; case 'boolean': ret = obj; break; case 'object': if (obj === null) { ret = null; } else { if (obj instanceof Array) { ret = []; for (var i = 0, len = obj.length; i < len; i++) { ret.push(clone(obj[i])); } } else { ret = {}; for (var k in obj) { ret[k] = clone(obj[k]); } } } break; default: ret = obj; break; } return ret; } // 檢測變量是否為email格式 function isEmail(mail) { if (/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(mail)) { return true; } return false; } // 驗證身份證號碼 function isIdenCode(code){ var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"內(nèi)蒙古",21:"遼寧",22:"吉林",23:"黑龍江 ",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北 ",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏 ",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"}; var tip = ""; var pass = true; if (!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)) { tip = "身份證號格式錯誤"; pass = false; } else if (!city[code.substr(0,2)]) { tip = "地址編碼錯誤"; pass = false; } else { //18位身份證需要驗證最后一位校驗位 if(code.length == 18){ code = code.split(''); //∑(ai×Wi)(mod 11) //加權(quán)因子 var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]; //校驗位 var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ]; var sum = 0; var ai = 0; var wi = 0; for (var i = 0; i < 17; i++) { ai = code[i]; wi = factor[i]; sum += ai * wi; } var last = parity[sum % 11]; if (parity[sum % 11] != code[17]) { tip = "校驗位錯誤"; pass = false; } } } return pass; } // 檢測變量是否為小數(shù) function isDecimal(dec){ if (dec.match(/^-?\d+(\.\d+)?$/g) == null) { return false; } return true; } // 檢測變量是否為整型 function isInteger(num){ if (num.match(/^[-+]?\d*$/) == null) { return false; } return true; } // 檢測變量是否為時間格式 function checkTime(str) { var time = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/); if (time == null) { return false; } if (time[1] > 24 || time[3] > 60 || time[4] > 60) { return false } return true; } // 檢測變量類型是否為日期格式 function checkDate(str) { var date = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); if (date == null) { return false; } var d = new Date(r[1], r[3]-1, r[4]); return (d.getFullYear() == r[1] && (d.getMonth()+1) == r[3] && d.getDate() == r[4]); } // 檢測變量是否為長日期格式 function checkDateTime(str) { var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/; var dt = str.match(reg); if (dt == null) { return false; } var d = new Date(dt[1], dt[3]-1, dt[4], dt[5], dt[6], dt[7]); return (d.getFullYear() == dt[1] && (d.getMonth()+1) == dt[3] && d.getDate() == dt[4] && d.getHours() == dt[5] && d.getMinutes() == dt[6] && d.getSeconds() == dt[7]); } // 檢測變量是否為未定義 function isUndefined(val) { return typeof val === 'undefined'; } // 檢測變量是否為定義 function isDefined(val) { return typeof val !== 'undefined'; } // 檢測變量類型是否為對象 function isObject(val) { return val !== null && typeof val === 'object'; } // 檢測變量類型是否為空對象 function isBlankObject(val) { return val !== null && typeof val === 'object' && !Object.getPrototypeOf(val); } // 檢測變量類型是否為字符串 function isString(val) { return typeof val === 'string'; } // 檢測變量類型是否為數(shù)字 function isNumber(val) { return typeof val === 'number'; } // 檢測變量類型是否為日期 function isDate(val) { return toString.call(val) === '[object Date]'; } // 檢測變量類型是否為函數(shù) function isFunction(val) { return typeof val === 'function'; } // 檢測變量類型是否為正則表達(dá)式 function isRegExp(val) { return toString.call(val) === '[object RegExp]'; } // 檢測變量是否window窗體對象 function isWindow(obj) { return obj && obj.window === obj; } // 檢測變量類型是否為布爾 function isBoolean(val) { return typeof val === 'boolean'; } // 檢測變量類型是否為文件對象 function isFile(obj) { return toString.call(obj) === '[object File]'; } // 檢測變量類型是否為表單對象 function isFormData(obj) { return toString.call(obj) === '[object FormData]'; } // 檢測變量類型是否為二進(jìn)制對象 function isBlob(obj) { return toString.call(obj) === '[object Blob]'; } // 轉(zhuǎn)全角字符 function toDBC(str) { var result = ""; var len = str.length; for (var i = 0; i < len; i++) { var code = str.charCodeAt(i); //全角與半角相差(除空格外):65248(十進(jìn)制) code = (code >= 0x0021 && code <= 0x007E) ? (code + 65248) : code; //處理空格 code = (code == 0x0020) ? 0x03000 : code; result += String.fromCharCode(code); } return result; } // 轉(zhuǎn)半角字符 function toSBC(str) { var result = ""; var len = str.length; for (var i = 0; i < len; i++) { var code = str.charCodeAt(i); //全角與半角相差(除空格外):65248(十進(jìn)制) code = (code >= 0xFF01 && code <= 0xFF5E) ? (code - 65248) : code; //處理空格 code = (code == 0x03000) ? 0x0020 : code; result += String.fromCharCode(code); } return result; } // 全角半角轉(zhuǎn)換 // angle: 0全到半,1半到全,其他不轉(zhuǎn)化 function chgAngle(str, angle) { if (typeof str != "string" || str.length <= 0 || !(angle === 0 || angle == 1)) { return str; } var i, len, ret = [], code; if (angle) { /*半->全*/ for (i = 0, len = str.length; i < len; i++) { code = str.charCodeAt(i); if (code == 32) { code = 12288; } else if (code < 127) { code += 65248; } ret.push(String.fromCharCode(code)); } } else { /*全->半*/ for (i = 0, len = str.length; i < len; i++) { code = str.charCodeAt(i); if (code == 12288) { code = 32; } else if (code > 65280 && code < 65375) { code -= 65248; } ret.push(String.fromCharCode(code)); } } return ret.join(""); } // 數(shù)據(jù)的本地化存儲 function makeWebStorage() { //IE用userdata實現(xiàn),w3c瀏覽器本身支持 if (("localStorage" in window)) { var store = { set : function(key, value) {localStorage.setItem(key, value)}, get : function(key) {return localStorage.getItem(key)}, remove : function(key) {return localStorage.removeItem(key)} } } else { var store = { userData : null, name : location.hostname, init : function () { if (!store.userData) { try { store.userData = document.createElement('INPUT'); store.userData.type = "hidden"; store.userData.style.display = "none"; store.userData.addBehavior("#default#userData"); document.body.appendChild(store.userData); var expires = new Date(); expires.setDate(expires.getDate() + 365); store.userData.expires = expires.toUTCString(); } catch (e) { return false; } } return true; }, setItem : function(key, value) { if (store.init()) { store.userData.load(store.name); store.userData.setAttribute(key, value); store.userData.save(store.name); } }, getItem : function(key) { if (store.init()) { store.userData.load(store.name); return store.userData.getAttribute(key); } }, remove : function(key) { if (store.init()) { store.userData.load(store.name); store.userData.removeAttribute(key); store.userData.save(store.name); } } }; } window.webStorage = store; } function makeSessionStorage() { if (("sessionStorage" in window)) { var store = { set : function(key, value) {window.sessionStorage.setItem(key, value)}, get : function(key) {return window.sessionStorage.getItem(key)}, remove : function(key) {return window.sessionStorage.removeItem(key)} } } else { var store = { set : function(key, value) {}, get : function(key) {}, remove : function(key) {} } } window.sessStorage = store; }
以上就是小編為大家?guī)淼某S肑avascript函數(shù)與原型功能收藏(必看篇)全部內(nèi)容了,希望大家多多支持腳本之家~
您可能感興趣的文章:
- 淺談javascript語法和定時函數(shù)
- javascript中基于replace函數(shù)的正則表達(dá)式語法
- 常用js,css文件統(tǒng)一加載方法(推薦) 并在加載之后調(diào)用回調(diào)函數(shù)
- js正則表達(dá)式常用函數(shù)詳解
- 自己封裝的常用javascript函數(shù)分享
- js中函數(shù)調(diào)用的兩種常用方法使用介紹
- nodejs文件操作模塊FS(File System)常用函數(shù)簡明總結(jié)
- js常用函數(shù) 不錯
- js 變量類型轉(zhuǎn)換常用函數(shù)與代碼[比較全]
- 100多個基礎(chǔ)常用JS函數(shù)和語法集合大全
相關(guān)文章
基于javascript實現(xiàn)彩票隨機(jī)數(shù)生成(升級版)
這篇文章主要為大家詳細(xì)介紹了基于javascript實現(xiàn)彩票隨機(jī)數(shù)生成的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01深入理解 TypeScript Reflect Metadata
這篇文章主要介紹了深入理解 TypeScript Reflect Metadata,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Bootstrap 網(wǎng)格系統(tǒng)布局詳解
在平面設(shè)計中,網(wǎng)格是一種由一系列用于組織內(nèi)容的相交的直線(垂直的、水平的)組成的結(jié)構(gòu)(通常是二維的)。這篇文章主要介紹了Bootstrap 網(wǎng)格系統(tǒng)布局,需要的朋友可以參考下2017-03-03JavaScript iframe 實現(xiàn)多窗口通信實例詳解
這篇文章主要為大家介紹了JavaScript iframe 實現(xiàn)多窗口通信實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10利用Bootstrap Multiselect實現(xiàn)下拉框多選功能
這篇文章主要介紹了利用Bootstrap Multiselect實現(xiàn)下拉框多選功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04