Skip to the content.

首页 | Blogs | 项目合集 | Bilibili↗
←返回 | 创建:2024-06-16 | 最后更新:2024-06-17

Textarea自适应高度

let textarea=document.getElementById('ID');
textarea.addEventListener("input", function() {this.style.height = "inherit";this.style.height = `${this.scrollHeight + 5}px`;});

应用后textarea有文本变化就会自动改变高度来自适应
但是还有CSS要应用来处理细节

textarea {
  padding: 0;
  overflow-y: hidden;
  overflow-x: auto;
  box-sizing: border-box;
}

js判断文本行数和逐行读取

String.prototype.lines = function() { return this.split(/\r*\n/); };
String.prototype.lineCount = function() { return this.lines().length; };

新增两种string方法

将文本另存为

function saveTxtAs(texts,filename) {//保存文本文件
  var hidden_a = document.createElement('a'); 
  hidden_a.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(texts)); 
  hidden_a.setAttribute('download', filename); 
  document.body.appendChild(hidden_a); hidden_a.click();
  hidden_a.remove();return;
}; //不推荐使用URLencode实现,还需要考虑编码问题

这里定义了一个函数saveTxtAs(texts,filename)

下方是base64版实现(推荐

function saveTxtAs(texts,filename) {//保存文本文件
  var hidden_a = document.createElement('a'); 
  hidden_a.setAttribute('href', 'data:text/plain;base64,'+window.btoa(unescape(encodeURIComponent(texts))));
  hidden_a.setAttribute('download', filename); 
  document.body.appendChild(hidden_a); hidden_a.click();
  hidden_a.remove();return;
};//把编码留给客户端自动识别就行了嘛

UTF-8与base64转换

// 使用utf-8字符集进行base64编码
function utoa(str) {
    return window.btoa(unescape(encodeURIComponent(str)));
}
// 使用utf-8字符集解析base64字符串 
function atou(str) {
    return decodeURIComponent(escape(window.atob(str)));
}

这是一种实现方式,具体是把utf里面的特殊字符全部转换为%形式
atob()btoa()可以编码%

Cookies操作

function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); var expires = "expires=" + d.toGMTString(); document.cookie = cname + "=" + cvalue + "; " + expires };
function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name) == 0) return c.substring(name.length, c.length) }; return null };

分别定义写cookie和getcookie
删除就把exdays设成比现在早的时间(比如1900年1月1日)
需注意Google浏览器没法为本地文件设置Cookies,而Edge可以

获取参数、删除参数

function getQueryString(name) { let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); let r = window.location.search.substr(1).match(reg); if (r != null) { return unescape(r[2]); }; return null; };
String.prototype.removeQuery = function(name) { if (name == undefined) {return this.replace(/[?&].*=[^&]*&?/g, "");} else {return this.replace(`/[?&]` + name + `=[^&]*&?/g`, "");}; };

查询参数信息,没有返回null
移除参数,没传递目标参数则为全部参数
(那你为啥不用window.location)

真sleep

function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); };

直接暂停当前流的执行,非异步处理