?24 个es6实际开发中遇到的问题及用到的es6 方法

?24 个es6实际开发中遇到的问题及用到的es6 方法

800_auto

1.如何隐藏所有指定的元素

const hide2 = (el) => Array.from(el).forEach(e => (e.style.display = 'none'));

// 事例:隐藏页面上所有`<img>`元素?

hide(document.querySelectorAll('img'))

2.如何检查元素是否具有指定的类?

页面DOM里的每个节点上都有一个classList对象,程序员可以使用里面的方法新增、删除、修改节点上的CSS类。使用classList,程序员还可以用它来判断某个节点是否被赋予了某个CSS类。

const hasClass = (el, className) => el.classList.contains(className)

// 事例

hasClass(document.querySelector('p.special'), 'special') // true

3.如何切换一个元素的类?

const toggleClass = (el, className) => el.classList.toggle(className)

// 事例 移除 p 具有类`special`的 special 类

toggleClass(document.querySelector('p.special'), 'special')

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 elementIsVisibleInViewport = (el, partiallyVisible = false) => {
const { top, left, bottom, right } = el.getBoundingClientRect();
const { innerHeight, innerWidth } = window;
return partiallyVisible
? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))
: top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
};

// 事例
elementIsVisibleInViewport(el); // 需要左右可见

elementIsVisibleInViewport(el, true); // 需要全屏(上下左右)可以见

6.如何获取元素中的所有图像?

const getImages = (el, includeDuplicates = false) => {
const images = [...el.getElementsByTagName('img')].map(img => img.getAttribute('src'));
return includeDuplicates ? images : [...new Set(images)];
};

// 事例:includeDuplicates 为 true 表示需要排除重复元素
getImages(document, true); // ['image1.jpg', 'image2.png', 'image1.png', '...']

getImages(document, false); // ['image1.jpg', 'image2.png', '...']

7.如何获取当前URL?

const currentURL = () => window.location.href

// 事例

currentURL() // 'https://google.com'

8.如何创建一个包含当前URL参数的对象?

const getURLParameters = url =>
(url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
(a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a),
{}
);

// 事例
getURLParameters('http://url.com/page?n=Adam&s=Smith'); // {n: 'Adam', s: 'Smith'}
getURLParameters('google.com'); // {}

9.如何向传递的URL发出GET请求?

const httpGet = (url, callback, err = console.error) =>{
const request = new XMLHttpRequest();
request.open('GET', url, true);
request.onload = () => callback(request.responseText);
request.onerror = () => err(request);
request.send();
};

httpGet(
'https://jsonplaceholder.typicode.com/posts/1',
console.log
);

// {"userId": 1, "id": 1, "title": "sample title", "body": "my text"}
10.如何对传递的URL发出POST请求?
const httpPost = (url, data, callback, err = console.error) => {
const request = new XMLHttpRequest();
request.open('POST', url, true);
request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
request...

点击查看剩余70%

{{collectdata}}

网友评论