В основном организуйте некоторые общие коды Js, обычно используемые в повседневной работе, чтобы облегчить запись и использование.
- 1. Перехватить строку с указанным количеством байт
- 2. Определите, является ли WeChat
- 3. Несколько примеров получения формата времени
- 4. Получить длину строки в байтах
- 5. Клонирование объекта, глубокая копия
- 6. Проверка сертификата кода организационной структуры
- 7. Проверка идентификационного номера
- 8.js Регулярно добавляйте логотип http в URL
- 9. Метод проверки правильности URL
- 10. Пользовательский метод jsonp
- 11. Работа с файлами cookie
- 12. Генерация случайных строк (можно указать длину)
- 13. Оценка браузера
- 14. Адаптация мобильного терминала Rem
- 15. Получить параметры после URL
- 16. Динамически загружайте JS
- 17. Генерация случайных значений цвета
- 18. Привязка и отвязка событий
- 19. Мобильное воспроизведение аудио
- 20. Мобильная видеоадаптация
- 21. Webpack+Vue-CLI реализует автоматическую глобальную регистрацию компонентов
- 22. Расчет точности
- 23. Единый кодекс социального кредита
1. Перехватить строку с указанным количеством байт
/**
* 截取指定字节的字符串
* @param str 要截取的字符穿
* @param len 要截取的长度,根据字节计算
* @param suffix 截取前len个后,其余的字符的替换字符,一般用“…”
* @returns {*}
*/
function cutString(str,len,suffix){
if(!str) return "";
if(len <= 0) return "";
if(!suffix) suffix = "";
var templen = 0;
for(var i = 0;i < str.length;i++){
if(str.charCodeAt(i) > 255){
templen += 2;
}else{
templen++
}
if(templen == len){
return str.substring(0, i+1) + suffix;
}else if(templen > len){
return str.substring(0, i) + suffix;
}
}
return str;
}
2. Определите, является ли WeChat
/**
* 判断微信浏览器
* @returns {Boolean}
*/
function isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
return true;
} else {
return false;
}
}
3. Несколько примеров получения формата времени
function getTimeFormat(time){
var date = new Date(parseInt(time) * 1000);
var month,day,hour,min;
parseInt(date.getMonth())+1<10?month = '0'+(parseInt(date.getMonth())+1):month = parseInt(date.getMonth())+1;
date.getDate()<10?day = '0'+date.getDate():day = date.getDate();
date.getHours()<10?hour = '0'+date.getHours():hour = date.getHours();
date.getMinutes()<10?min = '0'+date.getMinutes():min = date.getMinutes();
return [month, day].join('-')+' '+hour+':'+min
}
function getTimeFormatYMD(time) {
var date = new Date(parseInt(time) * 1000);
var year, month,day;
year = date.getFullYear();
parseInt(date.getMonth())+1<10?month = '0'+(parseInt(date.getMonth())+1):month = parseInt(date.getMonth())+1;
date.getDate()<10?day = '0'+date.getDate():day = date.getDate();
return [year, month, day].join('-')
}
function getTimeFormatAll(time) {
var date = new Date(parseInt(time) * 1000);
var year, month,day,hour,min, second;
year = date.getFullYear();
parseInt(date.getMonth())+1<10?month = '0'+(parseInt(date.getMonth())+1):month = parseInt(date.getMonth())+1;
date.getDate()<10?day = '0'+date.getDate():day = date.getDate();
date.getHours()<10?hour = '0'+date.getHours():hour = date.getHours();
date.getMinutes()<10?min = '0'+date.getMinutes():min = date.getMinutes();
date.getSeconds()<10?second = '0'+date.getSeconds():second = date.getSeconds();
return [year, month, day].join('-')+' '+hour+':'+min+':'+second
}
4. Получить длину строки в байтах
/**
* 获取字符串字节长度
* @param {String}
* @returns {Boolean}
*/
function checkLength(v){
var realLength = 0;
var len = v.length;
for (var i = 0; i < len; i++) {
var charCode = v.charCodeAt(i);
if (charCode >= 0 && charCode <= 128)
realLength += 1;
else
realLength += 2;
}
return realLength;
}
5. Клонирование объекта, глубокая копия
/**
* 对象克隆&深拷贝
* @param obj
* @returns {{}}
*/
function cloneObj(obj) {
var newO = {};
if (obj instanceof Array) {
newO = [];
}
for (var key in obj) {
var val = obj[key];
newO[key] = typeof val === 'object' ? arguments.callee(val) : val;
}
return newO;
};
克隆拷贝增强版
/**
* 对象克隆&深拷贝
* @param obj
* @returns {{}}
*/
function clone(obj) {
// Handle the 3 simple types, and null or undefined
if (null == obj || "object" != typeof obj) return obj;
// Handle Date
if (obj instanceof Date) {
var copy = new Date();
copy.setTime(obj.getTime());
return copy;
}
// Handle Array
if (obj instanceof Array) {
var copy = [];
for (var i = 0, len = obj.length; i < len; ++i) {
copy[i] = clone(obj[i]);
}
return copy;
}
// Handle Object
if (obj instanceof Object) {
var copy = {};
for (attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
}
return copy;
}
throw new Error("Unable to copy obj! Its type isn't supported.");
}
测试用例:
var origin = {
a: "text",
b: null,
c: undefined,
e: {
f: [1, 2]
}
}
6. Проверка сертификата кода организационной структуры
验证规则:
组织机构代码是每一个机关、社会团体、企事业单位在全国范围内唯一的、始终不变的法定代码
标识。最新使用的组织机构代码在1997年颁布实施,由8位数字(或大写拉丁字母)本体代码和
1位数字(或大写拉丁字母)校验码组成。本体代码采用系列(即分区段)顺序编码方法。
校验码按下列公式计算:
8
C9 = 11 - MOD ( ∑Ci * Wi ,11) … (2)
i=1
其中:MOD —— 表示求余函数;
i —— 表示代码字符从左到右位置序号;
Ci —— 表示第i位置上的代码字符的值,采用附录A“代码字符集”所列字符;
C9 —— 表示校验码;
Wi —— 表示第i位置上的加权因子,其数值如下表:
i 1 2 3 4 5 6 7 8
Wi 3 7 9 10 5 8 4 2
当MOD函数值为1(即 C9 = 10)时,校验码用字母X表示。
验证方法:
checkOrgCodeValid: function(el){
var txtval = el.value;
var values=txtval.split("-");
var ws = [3, 7, 9, 10, 5, 8, 4, 2];
var str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var reg = /^([0-9A-Z]){8}$/;
if (!reg.test(values[0])) {
return false
}
var sum = 0;
for (var i = 0; i < 8; i++) {
sum += str.indexOf(values[0].charAt(i)) * ws[i];
}
var C9 = 11 - (sum % 11);
var YC9 = values[1]+'';
if (C9 == 11) {
C9 = '0';
} else if (C9 == 10) {
C9 = 'X' ;
} else {
C9 = C9+'';
}
return YC9 == C9;
}
7. Проверка идентификационного номера
/**
* 验证身份证号
* @param el 号码输入input
* @returns {boolean}
*/
function checkCardNo(el){
var txtval = el.value;
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
return reg.test(txtval)
}
8.js Регулярно добавляйте логотип http в URL
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<script>
var html = 'http://www.google.com';
html += '\rwww.google.com';
html += '\rcode.google.com';
html += '\rhttp://code.google.com/hosting/search?q=label%3aPython';
var regex = /(https?:\/\/)?(\w+\.?)+(\/[a-zA-Z0-9\?%=_\-\+\/]+)?/gi;
alert('before replace:');
alert(html);
html = html.replace(regex, function(match, capture) {
if (capture) {
return match
} else {
return 'http://' + match;
}
});
alert('after replace:');
alert(html);
</script>
</head>
<body>
</body>
</html>
9. Метод проверки правильности URL
/**
* URL有效性校验
* @param str_url
* @returns {boolean}
*/
function isURL(str_url) {// 验证url
var strRegex = "^((https|http|ftp|rtsp|mms)?://)"
+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //
ftp的user@
+ "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
+ "|" // 允许IP和DOMAIN(域名)
+ "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
+ "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
+ "[a-z]{2,6})" // first level domain- .com or .museum
+ "(:[0-9]{1,4})?" // 端口- :80
+ "((/?)|" // a slash isn't required if there is no file name
+ "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
var re = new RegExp(strRegex);
return re.test(str_url);
}
// 建议的正则
functionisURL(str){
return!!str.match(/(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g);
}
10. Пользовательский метод jsonp
/**
* 自定义封装jsonp方法
* @param options
*/
jsonp = function(options) {
options = options || {};
if (!options.url || !options.callback) {
throw new Error("参数不合法");
}
//创建 script 标签并加入到页面中
var callbackName = ('jsonp_' + Math.random()).replace(".", "");
var oHead = document.getElementsByTagName('head')[0];
options.data[options.callback] = callbackName;
var params = formatParams(options.data);
var oS = document.createElement('script');
oHead.appendChild(oS);
//创建jsonp回调函数
window[callbackName] = function (json) {
oHead.removeChild(oS);
clearTimeout(oS.timer);
window[callbackName] = null;
options.success && options.success(json);
};
//发送请求
oS.src = options.url + '?' + params;
//超时处理
if (options.time) {
oS.timer = setTimeout(function () {
window[callbackName] = null;
oHead.removeChild(oS);
options.fail && options.fail({ message: "超时" });
}, time);
}
};
/**
* 格式化参数
* @param data
* @returns {string}
*/
formatParams = function(data) {
var arr = [];
for (var name in data) {
arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));
}
return arr.join('&');
}
11. Работа с файлами cookie
//写cookies
setCookie = function(name,value,time) {
var strsec = getsec(time);
var exp = new Date();
exp.setTime(exp.getTime() + strsec*1);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
//cookie操作辅助函数
getsec = function(str){
var str1=str.substring(1,str.length)*1;
var str2=str.substring(0,1);
if (str2=="s"){
return str1*1000;
}else if (str2=="h"){
return str1*60*60*1000;
}else if (str2=="d"){
return str1*24*60*60*1000;
}
}
//读取cookies
getCookie = function(name) {
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return (arr[2]);
else
return null;
}
//删除cookies
delCookie = function(name) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(name);
if(cval != null)
document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
12. Генерация случайных строк (можно указать длину)
/**
* 生成随机字符串(可指定长度)
* @param len
* @returns {string}
*/
randomString = function(len) {
len = len || 8;
var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'; /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
var maxPos = $chars.length;
var pwd = '';
for (var i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
}
13. Оценка браузера
function parseUA() {
var u = navigator.userAgent;
var u2 = navigator.userAgent.toLowerCase();
return { //移动终端浏览器版本信息
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或uc浏览器
iPhone: u.indexOf('iPhone') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1, //是否web应该程序,没有头部与底部
iosv: u.substr(u.indexOf('iPhone OS') + 9, 3),
weixin: u2.match(/MicroMessenger/i) == "micromessenger",
ali: u.indexOf('AliApp') > -1,
};
}
var ua = parseUA();
if (!ua.mobile) {
location.href = './pc.html';
}
14. Адаптация мобильного терминала Rem
var rem = {
baseRem: 40, // 基准字号,按照iphone6应该为20,此处扩大2倍,便于计算
baseWidth: 750, // 基准尺寸宽,此处是按照ihpone6的尺寸
rootEle: document.getElementsByTagName("html")[0],
initHandle: function () {
this.setRemHandle();
this.resizeHandle();
},
setRemHandle: function () {
var clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
this.rootEle.style.fontSize = clientWidth * this.baseRem / this.baseWidth + "px";
},
resizeHandle: function () {
var that = this;
window.addEventListener("resize", function () {
setTimeout(function () {
that.setRemHandle();
}, 300);
});
}
};
rem.initHandle();
15. Получить параметры после URL
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if(url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i++) {
theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
}
}
return theRequest;
}
16. Динамически загружайте JS
function loadScript(url, callback) {
var script = document.createElement("script");
script.type = "text/javascript";
if(typeof(callback) != "undefined"){
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else {
script.onload = function () {
callback();
};
}
}
script.src = url;
document.body.appendChild(script);
}
17. Генерация случайных значений цвета
function getRandomColor () {
const rgb = []
for (let i = 0 ; i < 3; ++i){
let color = Math.floor(Math.random() * 256).toString(16);
color = color.length == 1 ? '0' + color : color;
rgb.push(color);
}
return '#' + rgb.join('');
}
18. Привязка и отвязка событий
ElementClass.prototype.on = function (name, callback) {
this.callbacks[name] = this.callbacks[name] || []
this.callbacks[name].push(callback)
}
ElementClass.prototype.off = function (name, callback) {
var callbacks = this.callbacks[name]
if (callbacks && callbacks instanceof Array) {
var index = callbacks.indexOf(callback)
if (index !== -1) callbacks.splice(index, 1)
}
}
ElementClass.prototype.trigger = function (name, params) {
var callbacks = this.callbacks[name]
if (callbacks && callbacks instanceof Array) {
callbacks.forEach((cb) => {
cb(params)
})
}
}
19. Мобильное воспроизведение аудио
/**
* 移动端H5播放音乐处理,兼容微信端
* @param el 音乐Audio元素
*/
function playMusic(el) {
var b = document.getElementById(el);
var c = function c() {
b.play();
document.removeEventListener("touchstart", c, true);
};
b.play();
document.addEventListener("WeixinJSBridgeReady", function () {
c();
}, false);
document.addEventListener("YixinJSBridgeReady", function () {
c();
}, false);
document.addEventListener("touchstart", c, true);
}
20. Мобильная видеоадаптация
<video class="video1" webkit-playsinline="true" x-webkit-airplay="true" playsinline="true" x5-video-player-type="h5" x5-video-player-fullscreen="true" preload="auto" poster="poster图片地址" src="视频地址"></video>
21. Webpack+Vue-CLI реализует автоматическую глобальную регистрацию компонентов
// 需要 npm import --save lodash
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
const requireComponent = require.context(
// 其组件目录的相对路径
'./components',
// 是否查询其子目录
false,
// 匹配基础组件文件名的正则表达式,获取.vue结尾的文件
/.vue$/
)
requireComponent.keys().forEach(fileName => {
// 获取组件配置
const componentConfig = requireComponent(fileName)
// 获取组件的 PascalCase 命名
const componentName = upperFirst(
camelCase(
// 剥去文件名开头的 `./` 和结尾的扩展名
fileName.replace(/^\.\/(.*)\.\w+$/, '$1')
)
)
// 全局注册组件
Vue.component(
componentName,
// 如果这个组件选项是通过 `export default` 导出的,
// 那么就会优先使用 `.default`,
// 否则回退到使用模块的根。
componentConfig.default || componentConfig
)
22. Расчет точности
/**
* 加法运算,避免数据相加小数点后产生多位数和计算精度损失。
*
* @param num1加数1 | num2加数2
*/
function numAdd (num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split('.')[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split('.')[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
}
/**
* 加法运算,避免数据相减小数点后产生多位数和计算精度损失。
*
* @param num1被减数 | num2减数
*/
function numSub (num1, num2) {
var baseNum, baseNum1, baseNum2;
var precision; // 精度
try {
baseNum1 = num1.toString().split('.')[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split('.')[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
}
/**
* 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
*
* @param num1被乘数 | num2乘数
*/
function numMulti (num1, num2) {
var baseNum = 0;
try {
baseNum += num1.toString().split('.')[1].length;
} catch (e) {
console.error('numMulti error')
}
try {
baseNum += num2.toString().split('.')[1].length;
} catch (e) {
console.error('numMulti error')
}
return Number(num1.toString().replace('.', '')) * Number(num2.toString().replace('.', '')) / Math.pow(10, baseNum);
}
/**
* 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
*
* @param num1被除数 | num2除数
*/
function numDiv (num1, num2) {
var baseNum1 = 0,
baseNum2 = 0;
var baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split('.')[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split('.')[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum3 = Number(num1.toString().replace('.', ''));
baseNum4 = Number(num2.toString().replace('.', ''));
return (baseNum3 / baseNum4) * Math.pow(10, baseNum2 - baseNum1);
}
23. Проверка единого кода социального кредита
правило:
Согласно положениям статьи 4, статьи 1 Правил кодирования Единого кода социального кредита юридических лиц и иных организаций: Установлено, что единый код социального кредита должен состоять из 18 арабских цифр или заглавных букв английского алфавита (I, O , Z, S, V не используются).), включая первую цифру кода отдела управления регистрацией, вторую цифру кода категории учреждения, третью цифру кода административной единицы агентства по управлению регистрацией, 9-значный-17-значный идентификационный код субъекта (код организации), 18-битный контрольный код из пяти частей. Первая часть (1-я цифра): код отдела управления регистрацией, выраженный арабскими цифрами или английскими буквами. Например, три отдела управления регистрацией институционального учреждения, гражданских дел, промышленности и торговли представлены цифрами 1, 2 и 3 соответственно, а другие отделы управления регистрацией могут быть представлены соответствующими арабскими цифрами или английскими буквами.
Вторая часть (2-я цифра): код категории учреждения, выраженный арабскими цифрами или английскими буквами. Отдел управления регистрацией определяет код категории учреждения, зарегистрированного в отделе, в соответствии с функцией управления. Например, отдел учреждения организации может использовать 1 для обозначения органа, 2 для обозначения государственного учреждения и 3 для обозначения массовой организации, составленной организацией, непосредственно управляемой центральным офисом организации; отдел по гражданским делам может использовать 1 для обозначения социальная группа, 2 для обозначения частной непредпринимательской единицы и 3 для обозначения фонда; Промышленный и коммерческий сектор может использовать 1 для обозначения предприятий, 2 для представления отдельных промышленных и коммерческих домохозяйств и 3 для представления фермерских профессиональных кооперативов .
Третья часть (3-8 цифр): код административной единицы органа управления регистрацией, выраженный арабскими цифрами. Например, штат использует 100000, а Пекин использует 110000, который автоматически генерируется системой во время регистрации, отражая регистрацию юридических лиц и других организаций и местонахождение их органов управления регистрацией, что не только отвечает потребностям управления регистрацией. отделов регионального управления, но и помогает обществу понять местонахождение зарегистрированных субъектов. (См. «Кодекс административного деления Китайской Народной Республики» [GB/T2260-2007])
Четвертая часть (биты 9-17): основной идентификационный код корпуса (код организации), выраженный арабскими цифрами или английскими буквами. (См. «Правила составления кодекса национальной организации» [GB 11714-1997])
Пятая часть (18-я цифра): Контрольный код, выраженный арабскими цифрами или английскими буквами.
/**
* @description 验证统一社会信用代码
* @param socialCode 被验证代码
* @return Boolean
*/
function isSocialCode(socialCode) {
const reg = /[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/;
return reg.test(socialCode);
}