这19个JS代码技巧,后悔没有早点看到
在实际工作中,开发者常面临一些需巧妙编程解决的挑战。有时几行代码就能迎刃而解。本文整理了一系列实用代码片段,助您轻松处理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'); // scrolls smoothly to the element with the id fooBar smoothScroll('.fooBar'); // scrolls smoothly to the first element with a class of fooBar
7.如何处理元素外部的单击?
const onClickOutside = (element, callback) => {document.addEventListener('click', e => {if (!element.contains(e.target)) callback();}); };onClickOutside('#my-element', () => console.log('Hello')); // Will log 'Hello' whenever the user clicks outside of #my-element
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(); // Opens `body` in fullscreen mode fullscreen(false); // Exits fullscreen mode
13.如何检测Caps Lock是否打开?
<form><label for="username">Username:</label><input id="username" name="username"><label for="password">Password:</label><input id="password" name="password" type="password"><span id="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.如何从Date生成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]) ||defaultLang;detectLanguage(); // 'nl-NL'
18.如何查看用户的首选配色方案?
const prefersDarkColorScheme = () =>window &&window.matchMedia &&window.matchMedia('(prefers-color-scheme: dark)').matches;prefersDarkColorScheme(); // true
19.如何检查设备是否支持触摸事件?
const supportsTouchEvents = () =>window && 'ontouchstart' in window;supportsTouchEvents(); // true
在这篇文章中,我们列举了一些精心挑选的代码片段来解决开发过程中的常见挑战。这些代码片段涵盖了处理URL、DOM操作、事件处理、日期处理和用户偏好设置等多个方面,旨在提供简洁而高效的解决方案。希望你能在日常工作中找到并应用这些有价值的代码片段,从而提升编程效率和质量。
看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~
相关内容拓展:(技术前沿)
近 10 年间,甚至连传统企业都开始大面积数字化时,我们发现开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。
针对这类问题,低代码把某些重复出现的场景、流程,具象化成一个个组件、api、数据库接口,避免了重复造轮子。极大的提高了程序员的生产效率。
介绍一款程序员都应该知道的软件 JNPF 快速开发平台,基于 Java/.Net 双技术引擎,专注于低代码,采用业内领先的 SpringBoot 微服务架构、支持 SpringCloud 模式,完善了平台的扩增基础,满足了系统快速开发、灵活拓展、无缝集成和高性能应用等综合能力;采用前后端分离模式,前端和后端的开发人员可分工合作负责不同板块,省事又便捷。
免费体验官网:www.jnpfsoft.com/?csdn
相关文章:
这19个JS代码技巧,后悔没有早点看到
在实际工作中,开发者常面临一些需巧妙编程解决的挑战。有时几行代码就能迎刃而解。本文整理了一系列实用代码片段,助您轻松处理URL、DOM操作、事件处理、日期处理以及用户偏好设置等常见问题。 这些精选代码片段均源自“30 seconds of code”——一个卓…...

Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符
注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 iced的基本逻辑是: UI交互产生消息message,message传递给后台的update,在这个函数中编写逻辑,然后通过…...

ros2文件package.xml与cmakelists.txt比较
每次在ros2里面添加文件以后,都要修改packages.xml,与cmakelists.txt文件。...
vue3使用element plus树形选择器懒加载回显失败问题。
vue3使用element plus树形选择器懒加载回显时树形数据还未加载完成,回显时显示的的绑定值,不是要显示的名称。 解决1:不使用懒加载,一次性将数据返回完成 解决2:编辑回显时,拿到要显示的中文强制修改显示…...

Java基于springoot开发的企业招聘求职网站
演示视频: https://www.bilibili.com/video/BV1xw411n7Tu/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 技术:springootmysqlvuejsbootstrappoi制作word模板 主要功能:求职者可以注册发布简历,选择简…...
数据结构 / 顺序表 / 顺序表概述和结构体定义
1. 顺序表概述 顺序表:线性表的顺序存储称为顺序表逻辑结构:线性结构(一对一)存储结构:顺序存储(使用一段连续的存储空间存储类型相同的数据元素)顺序表:逻辑相邻,物理也相邻顺序表是借助于数组实现,但是不…...

js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数!
js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数! 函数封装和传参 首先我们,要封装这样一个函数,首先要确定,传入哪些参数。…...
通过内存标记扩展(MTE)提供增强的安全性
目录 一、内存安全BUG导致的安全漏洞 二、检测和修复内存安全漏洞的难点 三、MTE如何应对这一挑战...

深入理解main方法-Java
深入理解main方法-Java 一、语法说明二、特别说明三、动态传值 一、语法说明 public static void main(String[] args)main方法是虚拟机调用的java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是publicjava虚拟机在执行main()方法时不必创建对象&#x…...

C#开发的OpenRA游戏之属性SelectionDecorations(10)
C#开发的OpenRA游戏之属性SelectionDecorations(10) 前面分析了选择属性,继续分析前面的内容,不过这里不再是选择,而是选择相关的属性。 当用玩家选择地图上一个物品,或者士兵,或者坦克时,就会在周边画上一些指示标记,并且有一个状态条。 通过上图,可以看到建筑物周…...

【机器学习】迁移学习
迁移学习:给定一个有标记的源域和一个无标记的目标域。这两个领域的数据分布不同。迁移学习的目的就是要借助源域的知识,来学习目标域的知识(标签)。或是指基于源域数据和目标域数据、源任务和目标任务之间的相似性,利用在源领域中学习到的知…...

ubuntu 安装 jetbrains-toolbox
ubuntu 安装 jetbrains-toolbox 官网下载 jetbrains-toolbox jetbrains 官网 jetbrains 官网:https://www.jetbrains.com/ jetbrains-toolbox 官网下载页面 在下载页面点击 Download 安装 jetbrains-toolbox 解压 jetbrains-toolbox 安装包 到指定目录 本案例将…...

5.一维数组——输入一行字符,统计其中各个大写字母出现的次数。
文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 四、举一反三一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为一维数组编程题,点滴成长,一起逆袭。 一、题目描述 输入一行字符,统计其中各个大写字母出现的…...

FreeImage 编译安装
FreeImage下载: The FreeImage Project 点击第6行: Download FreeImage 3.18.0 或: wget http://downloads.sourceforge.net/freeimage/FreeImage3170.zip #解压 unzip FreeImage3170.zip -d freeImage 编译FreeImage源代码可能需要遵循…...
编程开发的 词汇
函数命名相关词汇: Strategy 策略 concrete 具体的 Context 上下文 execute 执行 handler 操作者 target 代理对象 proxy 代理 request 请求 iterator 迭代器 handle 方法处理 notify 通知 update 更新 remove 移除,清除 reset 重置 com…...

【开源】基于JAVA的天然气工程运维系统
项目编号: S 022 ,文末获取源码。 \color{red}{项目编号:S022,文末获取源码。} 项目编号:S022,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程…...

MyBatis的功能架构,MyBatis的框架架构设计,Mybatis都有哪些Executor执行器,Mybatis中如何指定使用哪一种Executor执行器
文章目录 MyBatis的功能架构是怎样的把Mybatis的功能架构分为三层: **MyBatis的框架架构设计**是怎么样的架构图如下Mybatis都有哪些Executor执行器?它们之间的区别是什么?Mybatis中如何指定使用哪一种Executor执行器? MyBatis的功…...

关于提示SLF4J: Class path contains multiple SLF4J bindings的问题解决
今天搭建hbase的时候启动hbase的时候shell面板输入了一大堆日志,如下: stopping hbase.....................SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/opt/software/hadoop-3.1.3/share/hadoop/common/l…...

外贸CRM客户管理系统是什么?外贸CRM作用?
外贸CRM客户管理系统有哪些?海洋建站如何选外贸软件? 企业的外贸业务面临着日益激烈的竞争。为了更好地管理客户关系、提高运营效率,越来越多的企业开始采用外贸CRM客户管理系统。那么,海洋建站来介绍一下,外贸CRM客户…...

python爬虫进阶篇(异步)
学习完前面的基础知识后,我们会发现这些爬虫的效率实在是太低了。那么我们需要学习一些新的爬虫方式来进行信息的获取。 异步 使用python3.7后的版本中的异步进行爬取,多线程虽然快,但是异步才是爬虫真爱。 基本概念讲解 1.什么是异步&…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...