10个日常开发必备的 JavaScript 代码片段

news2024/12/24 2:51:58

在 Web 开发领域,开发效率是关键。为什么每次开始新项目时都要重新发明轮子?今天,本文汇总整理了一些方便日常开发使用的 JavaScript 代码片段,超越了 Lodash 和 day.js 等常见代码片段,提升你的开发效率,减少工作时长。

在 Web 开发领域,开发效率是关键。为什么每次开始新项目时都要重新发明轮子?今天,本文汇总整理了一些方便日常开发使用的 JavaScript 代码片段,超越了 Lodash 和 day.js 等常见代码片段,提升你的开发效率,减少工作时长。

让我们开始吧!

1. 检测元素外的点击 

厌倦了复杂的检查以查看点击是否落在目标元素之外?使用 contains 方法简化事情,以更简洁的方式隐藏模式或折叠菜单:

复制

document.addEventListener('click', function (evt) {
     // isClickedOutside is true if the clicked element is outside 'ele'
     const isClickedOutside = !ele.contains(evt.target);
   });
2. 快速打开官方网站 

需要查阅第三方库的文档或存储库?这些命令将快速带您到达那里:

复制

# Open the homepage
   npm home PACKAGE_NAME
   npm home react


# Open the repository
   npm repo PACKAGE_NAME
   npm repo react
3. 一次性事件监听器 

对于只想处理一次的事件,可以利用 once 选项,而不是手动删除监听器:

复制

const handler = function (e) {};
   ele.addEventListener('event-name', handler, { once: true });
4. 将秒数格式化为 HH:mm:ss 

显示音频或视频的时长时,以用户友好的 HH:mm:ss 格式显示秒数:

复制

const formatSeconds = (s) =>
     [parseInt(s / 60 / 60), parseInt((s / 60) % 60), parseInt(s % 60)]
       .join(':')
       .replace(/\b(\d)\b/g, '0$1')

对于相对时间显示,如“几秒前”或“5 分钟前”,请探索 timeago.js 库!

5. 将 URL 参数转换为对象 

虽然 query-string 是一个流行的库,但可以直接使用 URLSearchParams API 实现相同的功能:

复制

const getUrlParams = (query) =>
     Array.from(new URLSearchParams(query)).reduce(
       (p, [k, v]) =>
         Object.assign({}, p, { [k]: p[k] ? (Array.isArray(p[k]) ? p[k] : [p[k]]).concat(v) : v }),
       {}
     )


// Get query parameters
   getUrlParams(location.query)
   // { a: ['1', '4'], b: '2', c: '3' }
   getUrlParams('?a=1&b=2&c=3&a=4') 
   // Get hash parameters
   getUrlParams(location.hash.split('?')[1])
6. 安全打开新标签页 

打开新标签页看似微不足道,但需要注意安全。在外部链接时,使用 noopener noreferrer 来防止恶意网站通过 window.opener.location 重定向您的网站。这同样适用于 window.open。

复制

<a target="_blank" rel="noopener noreferrer">...</a>


// window.open defaults rel to 'opener', so set it explicitly
   window.open('https://google.com', 'google', 'noopener,noreferrer')

警告:以下代码片段存在安全漏洞!

复制

<a target="_blank" rel="opener">
...</a>
window.opener.location = 'http://fake.website.here';
7. 预览上传的图像 

使用 FileReader API 直接在浏览器中显示用户上传图像的预览:

复制

function readImage() {
     const fileReader = new FileReader()
     const file = document.getElementById('uploaded-file').files[0]


    if (file) {
       fileReader.readAsDataURL(file)
     }


     fileReader.addEventListener(
       'load',
       () => {
         const result = fileReader.result
         const resultContainer = document.getElementById('result')
         const img = document.createElement('img')
         img.src = result
         resultContainer.append(img)
       },
       { once: true }
     )
   }
8. 下载文件 

使用 <a> 标签的下载属性触发下载。请记住,这对于同源文件可靠地起作用,并且在 IE 和移动设备上可能会受到限制:

复制

<a href="/path/to/file" download>Download</a>

或者,使用 JavaScript 生成临时的 <a> 标签:

复制

function download(url) {
     const link = document.createElement('a')
     link.download = 'file name'
     link.href = 'url'


     document.body.appendChild(link)
     link.click()
     document.body.removeChild(link)
}

对于静态文件,在服务器上设置适当的 Content-Disposition 标头也可以触发下载:

复制

Content-Disposition: attachment; filename="filename.jpg"

除了文件下载之外,还可以使用 Blob 对象和 createObjectURL 方法创建和下载文本或 JSON 文件:

复制

const data = JSON.stringify({ 'message': 'Hello Word' });


const blob = new Blob([data], { type: 'application/json' });
 // Create a URL for the blob
 const url = window.URL.createObjectURL(blob);
 // Download the URL using the 'download' function above
 ...


 // Release the URL object
 window.URL.revokeObjectURL(url);
9. 记忆函数结果 

使用记忆法缓存计算量大的函数的结果:

复制

const memoize = (fn) =>
     (
       (cache = Object.create(null)) =>
       (arg) =>
         cache[arg] || (cache[arg] = fn(arg))
     )()
10. 多行省略号...

使用 CSS 用省略号截断文本内容,无论是单行还是多行:

复制

.truncate {
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
   }


.truncate-multi {
     display: -webkit-box;
     -webkit-box-orient: vertical;
     -webkit-line-clamp: 2; 
     overflow: hidden;
   }

相关推荐

前端的世界总是在不断变化,作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。低代码也是一个值得我们深入探索的领域,让我们拭目以待,它将给前端世界带来怎样的变革。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

JNPF 可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。

希望这篇文章对你有所帮助~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1984932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

x264 中像素扩边算法源码分析

介绍 在视频编码中,特别是在使用x264这样的H.264/MPEG-4 AVC编码器时,像素扩边(或称为边缘扩展)是一项重要的预处理步骤。像素扩边的目的是在帧的边缘添加额外的像素,这样在编码过程中可以应用滤波器,如去块滤波器(deblocking filter)和水平/垂直滤波器,而不会受到帧…

Mysql开启SSL

等二测出未开启SSL,如下 have_openssl、have_ssl都是DISABLED也不知道当时为啥没开&#xff0c;看最近的都是开启的,整改必去得开了&#xff0c;开启步骤 1.生成秘钥 进入mysql的bin目录下&#xff0c;运行 ./mysql_ssl_rsa_setup运行后会生成证书 默认证书会在mysql的data…

PTrade常见问题系列20

量化周末测试不打印日志&#xff0c;需要如何测试&#xff1f; 需要将量化服务器后台时间&#xff0c;和ptrade终端所在的电脑时间改到下周一或周五&#xff0c;具体测试方案如下&#xff1a; 先停止nginx&#xff0c;并且备份nfs以防恢复异常。 1.重置生产账号A的密码(若测试…

sed 简易使用指南

sed 简易使用指南 1 sed 介绍2 查找3 替换4 反向引用5 删除6 cai&#xff08;菜&#xff09; 导言&#xff1a; 笔者之前花了较多时间学习并整理了sed命令相关的内容&#xff0c;以及一些进阶内容。但是&#xff0c;到后来使用也就只记得那么几个简单的选项&#xff0c;再高级的…

程序员进阶之路:缓存、网络、内存与案例

编辑推荐 适读人群 &#xff1a;本书适合有一定开发经验的开发人员&#xff0c;想要突破初级层次&#xff0c;迈向高级开发的程序员阅读。 【与时俱进】本书基于Linux 6.0及以上版本讲解书中涉及的各个模块&#xff0c;有助于读者理解现代Linux内核&#xff0c;掌握实用的技术…

XML动态sql查询当前时间之前的信息报错

如图&#xff0c;sql语句在数据库里可以正常运行但是再XML文件不可以正常运行&#xff0c;报错。 原因&#xff1a;在XML中小于号"<"是会被默认认定成文一个标签的开始&#xff0c;所以用小于号就会报错。 解决办法&#xff1a; 1.把表达式反过来改成大于号 2…

新手教学系列——使用 Redis 实现任务队列:先进先出和后进先出的选择

在分布式系统和高并发场景下,任务队列是管理任务调度和执行的关键工具。Redis 作为一种高效的内存数据库,提供了简单且强大的数据结构,可以方便地实现任务队列。本文将深入探讨如何利用 Redis 实现先进先出(FIFO)和后进先出(LIFO)两种任务队列,并介绍其应用场景和实现方…

11153 kill boss

这个问题可以通过模拟游戏的过程来解决。我们可以遍历每一轮的出招&#xff0c;根据出招的规则来计算每一轮的伤害&#xff0c;并更新Acmer和Boss的血量。如果在某一轮结束后&#xff0c;Acmer的血量小于等于0&#xff0c;那么Boss赢&#xff1b;如果Boss的血量小于等于0&#…

总线学习3--SPI

一 环境搭建 老规矩&#xff0c;先上图吧。。 上面电源线接到VBUS了&#xff0c;给的一个5V&#xff0c;应该3.3V。不过这个屏还能正常跑也是不错。 折腾了一个晚上&#xff0c;主要还是找驱动&#xff0c;然后熟悉SPI接口的接法。 遇到了两个坑&#xff1a; 1 接口名称不统…

Python异常处理:12个异常处理技巧,你掌握了几个?

探索Python异常处理的深度策略&#xff0c;从基础的try-except结构到自定义异常类的创建&#xff0c;再到利用上下文管理器和装饰器提升代码健壮性。深入理解异常传递机制&#xff0c;掌握日志记录与并发环境下异常处理的关键实践&#xff0c;强调了性能考量与避免异常作为控制…

简单的docker学习 第3章 docker镜像

第3章 Docker 镜像 3.1镜像基础 3.1.1 镜像简介 ​ 镜像是一种轻量级、可执行的独立软件包&#xff0c;也可以说是一个精简的操作系统。镜像中包含应用软件及应用软件的运行环境。具体来说镜像包含运行某个软件所需的所有内容&#xff0c;包括代码、库、环境变量和配置文件等…

尚硅谷谷粒商城项目笔记——三、安装docker【电脑CPU:AMD】

三、安装docker 注意&#xff1a; 因为电脑是AMD芯片&#xff0c;自己知识储备不够&#xff0c;无法保证和课程中用到的环境一样&#xff0c;所以环境都是自己根据适应硬件软件环境重新配置的&#xff0c;这里的虚拟机使用的是VMware。 首先关闭防火墙和安全策略 systemctl…

nature子刊真实案例,录用仅需1个月!1区SCI,截稿在即!

关注GZH【欧亚科睿学术】&#xff0c;第一时间了解期刊最新动态&#xff01; &#x1f680; &#x1f680; &#x1f680; &#x1f680; 快到飞起&#xff01;这本毕业神刊竟1个月秒录&#xff01; SCI期刊信息简介 【期刊类型】工程综合类SCIE&#xff08;1个月17天…

mac chrome打开网页,莫名其妙的闪退

今天&#xff0c;突然有用户反馈更新到浏览器版本后&#xff0c;打开特定网页时&#xff0c;浏览器会出现闪退的情况。 经过对业务代码长时间的排查都没有发现具体的问题&#xff0c;于是想到使用“大数据排查”&#xff08;上网google下&#xff09;的方法&#xff0c;终于在茫…

【技巧】IDEA打断点增加条件控制

【技巧】IDEA打断点增加条件控制

03、DQL(数据查询语言)

目录 1、编写顺序 2、基本查询 3、条件查询 4、聚合函数 5、分组查询 6、排序查询 7、分页查询 8、执行顺序 1、编写顺序 SELECT 字段列表 FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 ORDER BY 排序字段列表 LIMIT 分页参数2、基本查…

Visual C++ 下载、安装教程(微软常用运行库合集|dll报错必装)

前言 Microsoft Visual C Redistributable&#xff08;简称MSVC&#xff0c;VB/VC&#xff0c;系统运行库&#xff09;是Windows操作系统应用程序的基础类型库组件。此版Visual C运行库组件合集&#xff08;微软常用运行库合集&#xff09;由国内封装爱好者Dreamcast打包而成&…

C#学习笔记14:SYN6288语音模块_Winform上位机控制软件

今日尝试使用C# Winform写一个上位机软件控制 SYN6288语音模块 这里不讲什么基本原理(或者讲的比较略简)&#xff0c;直接讲实现了就...... 文章提供测试代码讲解、测试效果图、整体测试工程下载 目录 控件的摆放&#xff1a; SYN6288介绍: 代码编程&#xff1a; 对16进制发送…

计算机毕业设计选题推荐-出租车服务管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

ArrayList顺序表

目录 一、ArrayList变量的创建 二、ArrayList的三种构造方法 2.1 ArrayList() 2.2 ArrayList(int) 2.3 ArrayList(Collection) 三、ArrayList常用方法介绍 3.1 boolean add(E e) 3.2 E remove(int index) 和 boolean remove(Object o) 3.3 List subList(int fromInde…