这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.什么是异步&…...
为什么90%的GraalVM项目内存优化失败?——源于忽略这2个编译期元数据约束与1个运行时堆布局陷阱
第一章:为什么90%的GraalVM项目内存优化失败?——源于忽略这2个编译期元数据约束与1个运行时堆布局陷阱 GraalVM 原生镜像(Native Image)的内存优化常被误认为仅依赖 --optimize 或 --enable-http 等运行时参数,实则…...
Swoole + Redis Cluster 实时推送系统(千万级QPS压测实录+全链路监控配置清单)
第一章:Swoole Redis Cluster 实时推送系统概览现代高并发实时推送场景(如聊天消息、行情更新、协同编辑)对系统吞吐量、低延迟与水平扩展能力提出严苛要求。本系统以 Swoole 作为高性能异步协程服务器核心,结合 Redis Cluster 提…...
C++的移动语义陷阱:右值引用误用导致的问题
C的移动语义陷阱:右值引用误用导致的问题 C11引入的移动语义和右值引用极大地提升了程序性能,允许资源的高效转移而非复制。这一特性也带来了新的陷阱,尤其是右值引用的误用可能导致难以察觉的bug。本文将探讨几个常见的右值引用误用场景&am…...
5个实战技巧:快速掌握新一代AI组件开发
5个实战技巧:快速掌握新一代AI组件开发 【免费下载链接】Element-Plus-X Enterprise-level AI component library front-end solution 🤖 项目地址: https://gitcode.com/gh_mirrors/el/Element-Plus-X Element-Plus-X是企业级AI组件库前端解决方…...
为什么你的C# 14 AOT Dify客户端启动慢3秒?——基于CoreRT底层源码的6层初始化链路剖析
第一章:C# 14 AOT编译与Dify客户端启动性能的底层关联性C# 14 引入的原生AOT(Ahead-of-Time)编译能力,正深刻重构.NET应用的启动行为模型。当Dify官方客户端(基于MAUI或WPF构建的桌面前端)启用AOT编译时&am…...
Blazor应用体积爆炸?2026官方推荐的Razor源码生成器配置模板(.NET SDK 9.0.200+实测包体直降63%)
第一章:Blazor应用体积爆炸?2026官方推荐的Razor源码生成器配置模板(.NET SDK 9.0.200实测包体直降63%)Blazor WebAssembly 应用在 .NET SDK 9.0.200 及以上版本中,正式启用基于 Roslyn Source Generators 的 Razor 编…...
Spring框架中多TaskExecutor Bean冲突的自动注入问题及解决方案
1. 当Spring遇到多个TaskExecutor时的烦恼 最近在重构一个老项目时,我遇到了一个典型的Spring自动注入问题。项目启动时突然报错,控制台赫然显示"NoUniqueBeanDefinitionException: expected single matching bean but found 3"。仔细一看&…...
PL/SQL:xml数据
在PL/SQL中,使用Oracle数据库提供的XML解析功能来处理XML数据。Oracle数据库提供了多种方式来处理XML数据,包括使用内置的XML数据类型、XMLTable函数、XML序列和XPath查询等。 1. 使用XMLTypeXMLType是Oracle提供的一个内置类型,用于存储和操…...
别再只用DoHeatmap了!用pheatmap给单细胞marker基因热图加亿点细节(附完整R代码)
解锁单细胞热图高级定制:从DoHeatmap到pheatmap的工业级可视化方案 在单细胞转录组分析中,热图是展示marker基因表达模式的黄金标准工具。虽然Seurat的DoHeatmap函数提供了快速可视化的解决方案,但当我们需要发表级图表或更精细的表达模式展示…...
Pixel Script Temple Java开发全栈入门:从环境安装到项目实战
Pixel Script Temple Java开发全栈入门:从环境安装到项目实战 1. 前言:为什么选择Java全栈开发? Java作为一门经久不衰的编程语言,在企业级应用开发中占据着重要地位。学习Java全栈开发不仅能让你掌握后端服务的构建能力&#x…...
