当前位置: 首页 > news >正文

这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代码技巧,后悔没有早点看到

在实际工作中&#xff0c;开发者常面临一些需巧妙编程解决的挑战。有时几行代码就能迎刃而解。本文整理了一系列实用代码片段&#xff0c;助您轻松处理URL、DOM操作、事件处理、日期处理以及用户偏好设置等常见问题。 这些精选代码片段均源自“30 seconds of code”——一个卓…...

Rust UI开发(一):使用iced构建UI时,如何在界面显示中文字符

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 iced的基本逻辑是&#xff1a; UI交互产生消息message&#xff0c;message传递给后台的update&#xff0c;在这个函数中编写逻辑&#xff0c;然后通过…...

ros2文件package.xml与cmakelists.txt比较

每次在ros2里面添加文件以后&#xff0c;都要修改packages.xml,与cmakelists.txt文件。...

vue3使用element plus树形选择器懒加载回显失败问题。

vue3使用element plus树形选择器懒加载回显时树形数据还未加载完成&#xff0c;回显时显示的的绑定值&#xff0c;不是要显示的名称。 解决1&#xff1a;不使用懒加载&#xff0c;一次性将数据返回完成 解决2&#xff1a;编辑回显时&#xff0c;拿到要显示的中文强制修改显示…...

Java基于springoot开发的企业招聘求职网站

演示视频&#xff1a; https://www.bilibili.com/video/BV1xw411n7Tu/?share_sourcecopy_web&vd_source11344bb73ef9b33550b8202d07ae139b 技术&#xff1a;springootmysqlvuejsbootstrappoi制作word模板 主要功能&#xff1a;求职者可以注册发布简历&#xff0c;选择简…...

数据结构 / 顺序表 / 顺序表概述和结构体定义

1. 顺序表概述 顺序表&#xff1a;线性表的顺序存储称为顺序表逻辑结构&#xff1a;线性结构(一对一)存储结构&#xff1a;顺序存储(使用一段连续的存储空间存储类型相同的数据元素)顺序表&#xff1a;逻辑相邻&#xff0c;物理也相邻顺序表是借助于数组实现&#xff0c;但是不…...

js最新随机字符串,进制数随机字符串,更优秀的随机字符串方式,你绝对没用过的随机字符串方式,可控制位数!

js最新随机字符串&#xff0c;进制数随机字符串&#xff0c;更优秀的随机字符串方式&#xff0c;你绝对没用过的随机字符串方式&#xff0c;可控制位数&#xff01; 函数封装和传参 首先我们&#xff0c;要封装这样一个函数&#xff0c;首先要确定&#xff0c;传入哪些参数。…...

通过内存标记扩展(MTE)提供增强的安全性

目录 一、内存安全BUG导致的安全漏洞 二、检测和修复内存安全漏洞的难点 三、MTE如何应对这一挑战...

深入理解main方法-Java

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

C#开发的OpenRA游戏之属性SelectionDecorations(10)

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

【机器学习】迁移学习

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

ubuntu 安装 jetbrains-toolbox

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

5.一维数组——输入一行字符,统计其中各个大写字母出现的次数。

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

FreeImage 编译安装

FreeImage下载&#xff1a; The FreeImage Project 点击第6行&#xff1a; Download FreeImage 3.18.0 或&#xff1a; wget http://downloads.sourceforge.net/freeimage/FreeImage3170.zip #解压 unzip FreeImage3170.zip -d freeImage 编译FreeImage源代码可能需要遵循…...

编程开发的 词汇

函数命名相关词汇&#xff1a; Strategy 策略 concrete 具体的 Context 上下文 execute 执行 handler 操作者 target 代理对象 proxy 代理 request 请求 iterator 迭代器 handle 方法处理 notify 通知 update 更新 remove 移除&#xff0c;清除 reset 重置 com…...

【开源】基于JAVA的天然气工程运维系统

项目编号&#xff1a; S 022 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S022&#xff0c;文末获取源码。} 项目编号&#xff1a;S022&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程…...

MyBatis的功能架构,MyBatis的框架架构设计,Mybatis都有哪些Executor执行器,Mybatis中如何指定使用哪一种Executor执行器

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

关于提示SLF4J: Class path contains multiple SLF4J bindings的问题解决

今天搭建hbase的时候启动hbase的时候shell面板输入了一大堆日志&#xff0c;如下&#xff1a; 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客户管理系统有哪些&#xff1f;海洋建站如何选外贸软件&#xff1f; 企业的外贸业务面临着日益激烈的竞争。为了更好地管理客户关系、提高运营效率&#xff0c;越来越多的企业开始采用外贸CRM客户管理系统。那么&#xff0c;海洋建站来介绍一下&#xff0c;外贸CRM客户…...

python爬虫进阶篇(异步)

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

为什么90%的GraalVM项目内存优化失败?——源于忽略这2个编译期元数据约束与1个运行时堆布局陷阱

第一章&#xff1a;为什么90%的GraalVM项目内存优化失败&#xff1f;——源于忽略这2个编译期元数据约束与1个运行时堆布局陷阱 GraalVM 原生镜像&#xff08;Native Image&#xff09;的内存优化常被误认为仅依赖 --optimize 或 --enable-http 等运行时参数&#xff0c;实则…...

Swoole + Redis Cluster 实时推送系统(千万级QPS压测实录+全链路监控配置清单)

第一章&#xff1a;Swoole Redis Cluster 实时推送系统概览现代高并发实时推送场景&#xff08;如聊天消息、行情更新、协同编辑&#xff09;对系统吞吐量、低延迟与水平扩展能力提出严苛要求。本系统以 Swoole 作为高性能异步协程服务器核心&#xff0c;结合 Redis Cluster 提…...

C++的移动语义陷阱:右值引用误用导致的问题

C的移动语义陷阱&#xff1a;右值引用误用导致的问题 C11引入的移动语义和右值引用极大地提升了程序性能&#xff0c;允许资源的高效转移而非复制。这一特性也带来了新的陷阱&#xff0c;尤其是右值引用的误用可能导致难以察觉的bug。本文将探讨几个常见的右值引用误用场景&am…...

5个实战技巧:快速掌握新一代AI组件开发

5个实战技巧&#xff1a;快速掌握新一代AI组件开发 【免费下载链接】Element-Plus-X Enterprise-level AI component library front-end solution &#x1f916; 项目地址: https://gitcode.com/gh_mirrors/el/Element-Plus-X Element-Plus-X是企业级AI组件库前端解决方…...

为什么你的C# 14 AOT Dify客户端启动慢3秒?——基于CoreRT底层源码的6层初始化链路剖析

第一章&#xff1a;C# 14 AOT编译与Dify客户端启动性能的底层关联性C# 14 引入的原生AOT&#xff08;Ahead-of-Time&#xff09;编译能力&#xff0c;正深刻重构.NET应用的启动行为模型。当Dify官方客户端&#xff08;基于MAUI或WPF构建的桌面前端&#xff09;启用AOT编译时&am…...

Blazor应用体积爆炸?2026官方推荐的Razor源码生成器配置模板(.NET SDK 9.0.200+实测包体直降63%)

第一章&#xff1a;Blazor应用体积爆炸&#xff1f;2026官方推荐的Razor源码生成器配置模板&#xff08;.NET SDK 9.0.200实测包体直降63%&#xff09;Blazor WebAssembly 应用在 .NET SDK 9.0.200 及以上版本中&#xff0c;正式启用基于 Roslyn Source Generators 的 Razor 编…...

Spring框架中多TaskExecutor Bean冲突的自动注入问题及解决方案

1. 当Spring遇到多个TaskExecutor时的烦恼 最近在重构一个老项目时&#xff0c;我遇到了一个典型的Spring自动注入问题。项目启动时突然报错&#xff0c;控制台赫然显示"NoUniqueBeanDefinitionException: expected single matching bean but found 3"。仔细一看&…...

PL/SQL:xml数据

在PL/SQL中&#xff0c;使用Oracle数据库提供的XML解析功能来处理XML数据。Oracle数据库提供了多种方式来处理XML数据&#xff0c;包括使用内置的XML数据类型、XMLTable函数、XML序列和XPath查询等。 1. 使用XMLTypeXMLType是Oracle提供的一个内置类型&#xff0c;用于存储和操…...

别再只用DoHeatmap了!用pheatmap给单细胞marker基因热图加亿点细节(附完整R代码)

解锁单细胞热图高级定制&#xff1a;从DoHeatmap到pheatmap的工业级可视化方案 在单细胞转录组分析中&#xff0c;热图是展示marker基因表达模式的黄金标准工具。虽然Seurat的DoHeatmap函数提供了快速可视化的解决方案&#xff0c;但当我们需要发表级图表或更精细的表达模式展示…...

Pixel Script Temple Java开发全栈入门:从环境安装到项目实战

Pixel Script Temple Java开发全栈入门&#xff1a;从环境安装到项目实战 1. 前言&#xff1a;为什么选择Java全栈开发&#xff1f; Java作为一门经久不衰的编程语言&#xff0c;在企业级应用开发中占据着重要地位。学习Java全栈开发不仅能让你掌握后端服务的构建能力&#x…...