前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决常见JS问题的19个实用 ES6 片段

解决常见JS问题的19个实用 ES6 片段

作者头像
艾编程
发布2022-11-30 22:56:26
3500
发布2022-11-30 22:56:26
举报
文章被收录于专栏:艾编程艾编程

在我们的开发人员工作流程中,我们经常会遇到具有挑战性的问题,这些问题可能只需要几行代码就可以解决。在本文中,我试图编译有用的片段,这些片段可能会在您处理 URL、DOM、事件、日期、用户首选项等时为您提供帮助。

所有的片段都是精心挑选出来的。这是一个很棒的资源,我强烈建议您去查看更多内容。策划这些的主要标准是实际可用性。希望您会发现一些有价值的东西,您可以将其应用到您未来的代码库中。


1、如何获取base URL?

代码语言:javascript
复制
const getBaseURL = url => url.replace(/[?#].*$/, '');

getBaseURL('http://url.com/page?name=Adam&surname=Smith');
// 'http://url.com/page'

2、如何判断URL是否绝对?

代码语言:javascript
复制
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参数作为对象?

代码语言:javascript
复制
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.如何检查元素是否包含另一个元素?

代码语言:javascript
复制
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.如何获取元素的所有祖先?

代码语言:javascript
复制
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.如何平滑滚动元素进入视图?

代码语言:javascript
复制
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. 如何处理元素外的点击?

代码语言:javascript
复制
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?

代码语言:javascript
复制
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、如何获取选中的文字?

代码语言:javascript
复制
const getSelectedText = () => window.getSelection().toString();

getSelectedText(); // 'Lorem ipsum'

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

代码语言:javascript
复制
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元素添加样式?

代码语言:javascript
复制
const addStyles = (el, styles) => Object.assign(el.style, styles);

addStyles(document.getElementById('my-element'), {
 background: 'red',
 color: '#ffff00',
 fontSize: '3rem'
});

12.如何切换全屏模式?

代码语言:javascript
复制
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是否开启?

代码语言:javascript
复制
<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>
代码语言:javascript
复制
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.如何查看日期是否有效?

代码语言:javascript
复制
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. 如何从 Date 中获取冒号时间?

代码语言:javascript
复制
const getColonTimeFromDate = date => date.toTimeString().slice(0, 8);

getColonTimeFromDate(new Date()); // '08:38:00'

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

代码语言:javascript
复制
const getTimestamp = (date = new Date()) => Math.floor(date.getTime() / 1000);

getTimestamp(); // 1602162242

17、如何查看当前用户的首选语言?

代码语言:javascript
复制
const detectLanguage = (defaultLang = 'en-US') =>
 navigator.language ||
(Array.isArray(navigator.languages) && navigator.languages[0]) ||
 defaultLang;

detectLanguage(); // 'nl-NL'

18. 如何查看用户偏好的配色方案?

代码语言:javascript
复制
const prefersDarkColorScheme = () =>
 window &&
 window.matchMedia &&
 window.matchMedia('(prefers-color-scheme: dark)').matches;

prefersDarkColorScheme(); // true

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

代码语言:javascript
复制
const supportsTouchEvents = () =>
 window && 'ontouchstart' in window;

supportsTouchEvents(); // true

写作一直是我的热情所在,它让我乐于帮助和启发人们。如有任何疑问,请随时与我们联系!如果对你有帮助,记得点赞支持!

如果你正在学前端,可以关注我们!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、如何获取base URL?
  • 2、如何判断URL是否绝对?
  • 3.如何获取URL参数作为对象?
  • 4.如何检查元素是否包含另一个元素?
  • 5.如何获取元素的所有祖先?
  • 6.如何平滑滚动元素进入视图?
  • 7. 如何处理元素外的点击?
  • 8.如何生成UUID?
  • 9、如何获取选中的文字?
  • 10.如何将文字复制到剪贴板?
  • 11.如何给HTML元素添加样式?
  • 12.如何切换全屏模式?
  • 13.如何检测Caps lock是否开启?
  • 14.如何查看日期是否有效?
  • 15. 如何从 Date 中获取冒号时间?
  • 16. 如何从 Date 生成 UNIX 时间戳?
  • 17、如何查看当前用户的首选语言?
  • 18. 如何查看用户偏好的配色方案?
  • 19. 如何查看设备是否支持触摸事件?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档