class CutString { constructor(string, limit) { // temparary node to parse the html tags in the string this.tempDiv = document.createElement('div') this.tempDiv.id = 'TempNodeForTest' this.tempDiv.innerHTML = string // while parsing text no of characters parsed this.charCount = 0 this.limit = limit } cut() { var newDiv = document.createElement('div') this.searchEnd(this.tempDiv, newDiv) return newDiv.innerHTML } searchEnd(parseDiv, newParent) { var ele var newEle for (var j = 0; j < parseDiv.childNodes.length; j++) { ele = parseDiv.childNodes[j] // not text node if (ele.nodeType != 3) { newEle = ele.cloneNode(true) newParent.appendChild(newEle) if (ele.childNodes.length === 0) continue newEle.innerHTML = '' var res = this.searchEnd(ele, newEle) if (res) return res else { continue } } if (ele.nodeValue.length + this.charCount >= this.limit) { newEle = ele.cloneNode(true) newEle.nodeValue = ele.nodeValue.substr(0, this.limit - this.charCount) newParent.appendChild(newEle) return true } newEle = ele.cloneNode(true) newParent.appendChild(newEle) this.charCount += ele.nodeValue.length } return false } } export function defaults(newVal, oldVal, callback) { let value if (newVal === null || newVal === undefined) { value = oldVal } else { value = newVal } if (callback) { value = callback(value) } return value } /** * html字符串裁剪 * @param {String} html * @param {Number} length */ export function htmlCut(html, length) { return new CutString(html, length).cut() } export function timeFormat(second) { //秒 var str = '' //不支持大于60分钟的时间哟 var minute = parseInt(second / 60) if (minute < 10) str += '0' str += minute second = parseInt(second % 60) + '' if (second.length == 1) second = '0' + second str = str + ':' + second return str } export function monthDayFormat(date) { //秒 if (date.indexOf('T') != -1) { return date.substring(5, 10) } } /** * html字符串转文本 * @param {String} html */ export const html2Text = (function () { const div = document.createElement('div') return function (html) { if (!html) { return '' } div.innerHTML = html return div.innerText } })() /** * 计算字符串长度(英文占1个字符,中文汉字占2个字符) * @param {*} str */ export function getCharLength(str = '') { let len = 0 for (let i = 0; i < str.length; i++) { if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) { len += 2 } else { len++ } } return len } /** * 添加url请求参数 * @param {String} url 地址 * @param {Object} params 参数列表 */ export function addQueryParams(url, params = {}) { if (!url) { return '' } let has = url.indexOf('?') > -1 let arr = [] for (let key in params) { if (!url.match('&' + key + '|\\?' + key)) { arr.push(`${key}=${params[key]}`) } } if (arr.length) { return `${url}${has ? '&' : '?'}${arr.join('&')}` } return url } export function randomWord(randomFlag, min, max) { let str = '' let range = min let arr = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ] // 随机产生 if (randomFlag) { range = Math.round(Math.random() * (max - min)) + min } for (var i = 0; i < range; i++) { let pos = Math.round(Math.random() * (arr.length - 1)) str += arr[pos] } return str } /** * 密码加密 * @param {String} pwd */ export function password(pwd) { const NUM = 2 const front = randomWord(false, 8) const middle = randomWord(false, 8) const end = randomWord(false, 8) let str = Base64.encode(pwd) let str1 = str.substring(0, NUM) let str2 = str.substring(NUM) return front + str2 + middle + str1 + end } /** * 删除输入法表情符号 * @param {*} content */ export function removeEmoji(content = '') { return content.replace(/[\ud800-\udbff][\udc00-\udfff]/g, function (char) { if (char.length === 2) { return '' } else { return char } }) }