实用的 ES6 代码片段

在我们的开发流程中,我们经常会遇到一些具有挑战性的问题,而解决这些问题可能只需要几行代码。在本文中,我试图整理出一些有用的代码片段,帮助您在处理 URL、DOM、事件、日期、用户偏好等方面时更加便捷。

所有这些代码片段都是从"30 seconds of code"中精心挑选的。这是一个很棒的资源,我强烈推荐去查看更多内容。

这些代码片段被筛选的主要标准是实用性。希望您能找到一些有价值的东西,可以应用到未来的代码库中。

1. 如何获取 base URL?

const getBaseURL = (url) => url.replace(/[?#].*$/, '')getBaseURL('http://url.com/page?name=Adam&surname=Smith')
// 'http://url.com/page'

2. 如何检查 URL 是否为绝对路径?

const isAbsoluteURL = (str) => /^[a-z][a-z0-9+.-]*:/.test(str)isAbsoluteURL('https://google.com') // true
isAbsoluteURL('ftp://www.myserver.net') // true
isAbsoluteURL('/foo/bar') // false

3. 如何将 URL 参数转换为对象?

const getURLParameters = (url) =>(url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce((a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a),{})getURLParameters('google.com') // {}
getURLParameters('http://url.com/page?name=Adam&surname=Smith')
// {name: 'Adam', surname: 'Smith'}

4. 如何检查一个元素是否包含另一个元素?

const elementContains = (parent, child) =>parent !== child && parent.contains(child)elementContains(document.querySelector('head'), document.querySelector('title'))
// true
elementContains(document.querySelector('body'), document.querySelector('body'))
// false

5. 如何获取元素的所有祖先元素?

const getAncestors = (el) => {let ancestors = []while (el) {ancestors.unshift(el)el = el.parentNode}return ancestors
}getAncestors(document.querySelector('nav'))
// [document, html, body, header, nav]

6. 如何平滑滚动到元素视图中?

const smoothScroll = (element) =>document.querySelector(element).scrollIntoView({behavior: 'smooth',})smoothScroll('#fooBar') // 平滑滚动到id为fooBar的元素
smoothScroll('.fooBar')
// 平滑滚动到class为fooBar的第一个元素

7. 如何处理点击元素外部的事件?

const onClickOutside = (element, callback) => {document.addEventListener('click', (e) => {if (!element.contains(e.target)) callback()})
}onClickOutside('#my-element', () => console.log('Hello'))
// 当用户点击#my-element外部时将输出'Hello'

8. 如何生成 UUID?

const UUIDGeneratorBrowser = () =>([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>(c ^(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))).toString(16))UUIDGeneratorBrowser() // '7982fcfe-5721-4632-bede-6000885be57d'

9. 如何获取选定的文本?

const getSelectedText = () => window.getSelection().toString()getSelectedText() // 'Lorem ipsum'

10. 如何将文本复制到剪贴板?

const copyToClipboard = (str) => {if (navigator && navigator.clipboard && navigator.clipboard.writeText)return navigator.clipboard.writeText(str)return Promise.reject('The Clipboard API is not available.')
}

11. 如何为 HTML 元素添加样式?

const addStyles = (el, styles) => Object.assign(el.style, styles)addStyles(document.getElementById('my-element'), {background: 'red',color: '#ffff00',fontSize: '3rem',
})

12. 如何切换全屏模式?

const fullscreen = (mode = true, el = 'body') =>mode? document.querySelector(el).requestFullscreen(): document.exitFullscreen()fullscreen() // 将body以全屏模式打开
fullscreen(false) // 退出全屏模式

13. 如何检测大写锁定是否打开?

<form><label for="username">Username:</label><inputid="username"name="username"/><label for="password">Password:</label><inputid="password"name="password"type="password"/><spanid="password-message"style="display: none">Caps Lock is on</span>
</form>
const el = document.getElementById('password')
const msg = document.getElementById('password-message')el.addEventListener('keyup', (e) => {msg.style = e.getModifierState('CapsLock')? 'display: block': 'display: none'
})

14. 如何检查日期是否有效?

const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf())isDateValid('December 17, 1995 03:24:00') // true
isDateValid('1995-12-17T03:24:00') // true
isDateValid('1995-12-17 T03:24:00') // false
isDateValid('Duck') // false
isDateValid(1995, 11, 17) // true
isDateValid(1995, 11, 17, 'Duck') // false
isDateValid({}) // false

15. 如何从日期获取时间(带冒号)?

const getColonTimeFromDate = (date) => date.toTimeString().slice(0, 8)getColonTimeFromDate(new Date()) // '08:38:00'

16. 如何从日期生成 UNIX 时间戳?

const getTimestamp = (date = new Date()) => Math.floor(date.getTime() / 1000)getTimestamp() // 1602162242

17. 如何检查当前用户的首选语言?

const detectLanguage = (defaultLang = 'en-US') =>navigator.language ||(Array.isArray(navigator.languages) && navigator.languages[0]) ||defaultLangdetectLanguage() // 'nl-NL'

18. 如何检查当前用户的首选颜色方案?

const prefersDarkColorScheme = () =>window &&window.matchMedia &&window.matchMedia('(prefers-color-scheme: dark)').matchesprefersDarkColorScheme() // true

19. 如何检查设备是否支持触摸事件?

const supportsTouchEvents = () => window && 'ontouchstart' in windowsupportsTouchEvents() // true

 

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

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

相关文章

代码随想录刷题题Day5

刷题的第五天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C / Python Day5 任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 1 哈希表理…

【开题报告】基于SpringBoot的艾滋病科普平台的设计与实现

1.选题背景 艾滋病&#xff08;艾滋病毒感染与免疫缺陷综合征&#xff09;是一种严重的传染病&#xff0c;对人类的健康和社会稳定造成了极大的影响。全球范围内&#xff0c;艾滋病已经成为公共卫生领域的重大挑战之一。尽管在科学研究和医疗技术方面取得了一定进展&#xff0…

MT8390商显广告机主板_MTK联发科安卓主板方案开发

商显广告机采用MediaTek 联发科平台主板方案。安卓主板具有更高的性能、更丰富的接口、更多的存储空间以及更为便捷的网络连接方式&#xff0c;可以满足更为复杂的开发和应用需求使其应用领域更加多元化&#xff0c;被广泛应用于各行各业。 商显广告机主板基于联发科MT8390八核…

repmgr手动切换主从失败,报错‘DETAIL: local node last receive LSN‘

repmgr:5.4.0 pgsql: 14.2 OS:centos7.8刚搭建好的repmgr主从使用命令手动进行切换失败,日志如下 postgresdb02:~$ repmgr standby switchover NOTICE: executing switchover on node "db02" (ID: 2) NOTICE: local node "db02" (ID: 2) will be promoted…

智能AI系统ChatGPT网站系统源码+Midjourney绘画+支持DALL-E3文生图,支持最新GPT-4-Turbo模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么

一个页面从输入URL到加载显示完成经历了以下过程&#xff1a; DNS解析&#xff1a;浏览器会解析URL中的域名&#xff0c;将其转换为对应的IP地址。如果浏览器缓存中存在该域名的IP地址&#xff0c;则跳过DNS解析步骤。 建立TCP连接&#xff1a;通过解析得到的IP地址&#xff0…

Ubuntu18.04安装Ipopt-3.12.8流程

本文主要介绍在Ubuntu18.04中安装Ipopt库的流程&#xff0c;及过程报错的解决方法&#xff0c;已经有很多关于Ipopt安装的博客&#xff0c;但经过我的测试&#xff0c;很多都失效了&#xff0c;经过探索&#xff0c;找到可流畅的安装Ipopt的方法&#xff0c;总结成本篇博客。 …

使用typescript搭建express

使用typescript搭建express 开始 为这个项目创建一个新的目录&#xff0c;使用下面的命令初始化项目并创建一个包。 NPM init -y初始化后&#xff0c;让我们安装必要的包 npm i express dotenv cors helmet body-parser 在express中配置typescript npm i -D typescript typ…

C#多进程通信之共享内存方式

共享内存方式应该最简单易用的 直接上代码,下面列出了2种,一种是映射视图,一种是映射流,任选一种即可 服务端: MemoryMappedFile memoryAccessor MemoryMappedFile.CreateNew("ProcessCommunicationAccessor", 500, MemoryMappedFileAccess.ReadWrite);//创建共享…

WordPress批量上传文章和自动发布文章的方法

专业介绍&#xff1a;WordPress批量上传文章技术解析 在现代数字时代&#xff0c;内容创作是网络存在的驱动力之一。对于博客作者、新闻编辑和内容管理员而言&#xff0c;高效地批量上传文章至WordPress平台是提高工作效率的一个关键方面。WordPress作为最受欢迎的内容管理系统…

【C语言】递归详解

目录 1.前言2. 递归的定义3. 递归的限制条件4. 递归举例4.1 求n的阶乘4.1.1 分析和代码实现4.1.2 画图演示 4.2 顺序打印一个整数的每一位4.2.1 分析和代码实现4.2.2 画图推演 4.3 求第n个斐波那契数 5. 递归与迭代5.1 迭代求第n个斐波那契数 1.前言 这次博客内容是与递归有关&…

【数组】-Lc27-移除元素(快慢双指针)

写在前面 最近想复习一下数据结构与算法相关的内容&#xff0c;找一些题来做一做。如有更好思路&#xff0c;欢迎指正。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面 一、场景描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地移除所有数值等于…

迪文串口5使用查询方式发送数据

迪文屏串口5寄存器如下 发送数据我采用的不是中断&#xff0c;而是查询发送标志位实现的。 串口5不像串口2一样&#xff08;串口2可以位寻址&#xff0c;串口5不行&#xff09;&#xff0c;所以如果采用查询模式&#xff0c;需要判断寄存器的数据&#xff0c;我的写法比较简单…

Django高级之——Ajax、cookie与session

一 什么是Ajax AJAX&#xff08;Asynchronous Javascript And XML&#xff09;翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互&#xff0c;传输的数据为XML&#xff08;当然&#xff0c;传输的数据不只是XML,现在更多使用json数据&#xf…

apk和小程序渗透测试

apk和小程序渗透测试 文章目录 apk和小程序渗透测试小程序渗透测试apk和小程序的抓包安装证书apk渗透 小程序渗透测试 小程序的默认路径在 C:\Program Files (x86)\Tencent\WeChat\WeChatApp 使用UnpackMiniApp、wxappUnpacker工具完成逆向 先打开UnpackMiniApp.exe工具 选…

C++ 指针详解

目录 一、指针概述 指针的定义 指针的大小 指针的解引用 野指针 指针未初始化 指针越界访问 指针运算 二级指针 指针与数组 二、字符指针 三、指针数组 四、数组指针 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 指针与数组 一维数组 字符数组…

pbootcms建站

pbootcms建站 一、下载pbootcms二、安装1、进入宝塔面在网站栏&#xff0c;新建站点&#xff0c;将该址里面文件全部清再将下载的pbootcms上传至该地址。 三、修改关联数据库1、在根目录下/config打开database.php照如下修改这里我使用mysqli数据库。修改并使用自已创建的数据库…

全网最新最全的自动化测试:python+pytest接口自动化-接口测试基础

接口定义 一般我们所说的接口即API&#xff0c;那什么又是API呢&#xff0c;百度给的定义如下&#xff1a; API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;是一些预先定义的接口&#xff08;如函数、HTTP接口&#xff09;&#xff0c…

【Linux】服务器免密登陆

由于专业要求&#xff0c;我需要经常通过 VSCode、Terminal 等工具连接远程服务器开展工作。而每次连接都需要输入一次或多次密码无疑影响了工作体验。基于该背景&#xff0c;本文介绍了免密登陆远程服务器的方式。 1. 生成 id_rsa.pub 文件 根据自己的邮箱地址&#xff0c;利…

AIGC: 关于ChatGPT中Function Call的调用

Function Call 概念 关于 GPT 中API的function参数&#xff0c;提供了一些能力 这个函数调用是 Open AI 在2023年的6.13号发布的新能力根据它的官方描述, 函数调用能力可以让模型输出一个请求调用函数的消息其中包含所需调用函数的信息&#xff0c;以及调用函数时所需携带的参…