24個解決實際問題的ES6代碼段

1请琳、如何隱藏所有指定元素花鹅?

const hide = (...el) => [...el].forEach(e => (e.style.display = "none"));

// Example
hide(document.querySelectorAll("img"));  // 隱藏頁面上所有<img />元素

2、如何確認元素是否具有指定的類沈条?

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

// Example 
hasClass(document.querySelector("p.special"), "special"); // true

3匾委、如何切換元素的類拖叙?

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

// Example 
toggleClass(document.querySelector( p.special ),  special ); // 該段不再有 "special" 類

4、如何獲取當前頁面的滾動位置赂乐?

const getScrollPosition = (el = window) => ({ 
    x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft, 
    y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop 
}); 

// Example 
getScrollPosition(); // {x: 0, y: 200}

5薯鳍、如何評價滾動到頁面頂部?

const scrollToTop = () => {     
    const c = document.documentElement.scrollTop || document.body.scrollTop;     
    if (c > 0) {         
        window.requestAnimationFrame(scrollToTop);         
        window.scrollTo(0, c - c / 8);     
    } 
}; 

// Example 
scrollToTop();

6挨措、如何確認父元素是否包含子元素挖滤?

const elementContains = (parent, child) => parent !== child && parent.contains(child);  

// Examples  
elementContains(document.querySelector("head"), document.querySelector("title"));  // true  
elementContains(document.querySelector("body"), document.querySelector("body")); // false

7、如何確認指定元素是否在視口可見浅役?

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; 
}; 

// Examples 
elementIsVisibleInViewport(el); // (不完全可見) 
elementIsVisibleInViewport(el, true); // (部分可見)

8壶辜、如何獲取一個元素內的所有圖像?

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

// Examples 
getImages(document, true); // ["image1.jpg", "image2.png", "image1.png", "..."] 
getImages(document, false); // ["image1.jpg", "image2.png", "..."]

9担租、如何分辨設備是移動設備還是桌面設備?

const detectDeviceType = () => /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ? "Mobile" : "Desktop"; 

// Example 
detectDeviceType(); // "Mobile" or "Desktop"

10抵怎、如何獲取當前 URL奋救?

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

// Example 
currentURL(); // "https://google.com"

11、如何創(chuàng)建一個包含當前 URL 參數的對象反惕?

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

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

12尝艘、如何將一組表單元素編碼為一個對象?

const formToObject = form => Array.from(new FormData(form)).reduce((acc, [key, value]) => ({  ...acc,  [key]: value  }),{}); 

// Example 
formToObject(document.querySelector("#form")); // { email: "test@email.com", name: "Test Name" }

13姿染、如何從對象檢索給定選擇器指示的一組屬性背亥?

const get = (from, ...selectors) => [...selectors].map(s => s.replace(/[([^[]]*)]/g, ".$1.").split(".").filter(t => t !== "").reduce((prev, cur) => prev && prev[cur], from)); 
const obj = { selector: { to: { val: "val to select" } }, target: [1, 2, { a: "test" }] }; 

// Example 
get(obj, "selector.to.val", "target[0]", "target[2].a"); // ["val to select", 1, "test"]

14、如何在等待一定時間后調用提供的函數(單位毫秒)悬赏?

const delay = (fn, wait, ...args) => setTimeout(fn, wait, ...args); 

delay(function(text) {     
    console.log(text); 
}, 1000, "later"); // 一秒后記錄 "later"

15狡汉、如何在給定元素上觸發(fā)特定事件,且可選傳遞自定義數據闽颇?

const triggerEvent = (el, eventType, detail) => el.dispatchEvent(new CustomEvent(eventType, { detail })); 

// Examples 
triggerEvent(document.getElementById("myId"), "click"); 
triggerEvent(document.getElementById( myId ), "click", { username: "bob" });

16盾戴、如何移除一個元素的事件偵聽器?

const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts);
const fn = () => console.log("!"); 
document.body.addEventListener("click", fn); 
off(document.body, "click", fn); // no longer logs "!" upon clicking on the page

17兵多、如何獲得給定毫秒數的可讀格式尖啡?

const formatDuration = ms => {     
    if (ms < 0) ms = -ms; 
    const time = {         
        day: Math.floor(ms / 86400000),         
        hour: Math.floor(ms / 3600000) % 24,         
        minute: Math.floor(ms / 60000) % 60,         
        second: Math.floor(ms / 1000) % 60,         
        millisecond: Math.floor(ms) % 1000      
    };     
    return Object.entries(time).filter(val => val[1] !== 0).map(([key, val]) => `${val} ${key}${val !== 1 ? "s" : ""}`).join(","); 
}; 

// Examples 
formatDuration(1001); // 1 second, 1 millisecond
formatDuration(34325055574); // 397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds

18橄仆、如何獲取兩個日期之間的天數間隔?

const getDaysDiffBetweenDates = (dateInitial, dateFinal) => (dateFinal - dateInitial) / (1000 * 3600 * 24); 

// Example 
getDaysDiffBetweenDates(new Date("2017-12-13"), new Date("2017-12-22")); // 9

19衅斩、如何對傳遞的 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
); 
// Logs: {"userId": 1, "id": 1, "title": "sample title", "body": "my text"}

20、如何對傳遞的 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.onload = () => callback(request.responseText);     
    request.onerror = () => err(request);     
    request.send(data); 
}; 
const newPost = { 
    userId: 1, 
    id: 1337, 
    title:  Foo ,     
    body:  bar bar bar  
}; 

const data = JSON.stringify(newPost); 
httpPost(
    "https://jsonplaceholder.typicode.com/posts", 
    data,
    console.log
); 
// Logs: {"userId": 1, "id": 1337, "title": "Foo", "body": "bar bar bar"}

21您宪、如何為指定選擇器創(chuàng)建具有指定范圍、步長和持續(xù)時間的計時器具温?

const counter = (selector, start, end, step = 1, duration = 2000) => {     
    let current = start,     
    _step = (end - start) * step < 0 ? -step : step,     
    timer = setInterval(() => {         
        current += _step;         
        document.querySelector(selector).innerHTML = current;         
        if (current >= end) document.querySelector(selector).innerHTML = end;         
        if (current >= end) clearInterval(timer);     
    }, Math.abs(Math.floor(duration / (end - start))));     
    return timer;
}; 

// Example 
counter( #my-id , 1, 1000, 5, 2000); // 為 id="my-id" 的元素創(chuàng)建一個兩秒的計時器

22蚕涤、如何將一個字符串復制到剪貼板?

const copyToClipboard = str => {     
    const el = document.createElement( textarea );     
    el.value = str;     
    el.setAttribute( readonly ,   );     
    el.style.position =  absolute ;     
    el.style.left =  -9999px ;     
    document.body.appendChild(el);     
    const selected = document.getSelection().rangeCount > 0 ? document.getSelection().getRangeAt(0) : false;     
    el.select();     
    document.execCommand( copy );     
    document.body.removeChild(el);     
    if (selected) {         
        document.getSelection().removeAllRanges();         
        document.getSelection().addRange(selected);     
    } 
}; 

// Example 
copyToClipboard( Lorem ipsum ); //  Lorem ipsum  copied to clipboard.

23铣猩、如何確定頁面的瀏覽器選項卡是否處于前臺活躍狀態(tài)揖铜?

const isBrowserTabFocused = () => !document.hidden; 

// Example 
isBrowserTabFocused(); // true

24、如果一個目錄不存在达皿,如何創(chuàng)建它天吓?

const fs = require( fs ); const createDirIfNotExists = dir => (!fs.existsSync(dir) ? fs.mkdirSync(dir) : undefined); 

// Example 
createDirIfNotExists( test ); // creates the directory  test , if it doesn t exist
``

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市峦椰,隨后出現的幾起案子龄寞,更是在濱河造成了極大的恐慌,老刑警劉巖汤功,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件物邑,死亡現場離奇詭異,居然都是意外死亡滔金,警方通過查閱死者的電腦和手機色解,發(fā)現死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來餐茵,“玉大人科阎,你說我怎么就攤上這事》拮澹” “怎么了锣笨?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長道批。 經常有香客問我错英,道長,這世上最難降的妖魔是什么屹徘? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任走趋,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘簿煌。我一直安慰自己氮唯,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布姨伟。 她就那樣靜靜地躺著惩琉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夺荒。 梳的紋絲不亂的頭發(fā)上瞒渠,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音技扼,去河邊找鬼伍玖。 笑死,一個胖子當著我的面吹牛剿吻,可吹牛的內容都是我干的窍箍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼丽旅,長吁一口氣:“原來是場噩夢啊……” “哼椰棘!你這毒婦竟也來了?” 一聲冷哼從身側響起榄笙,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤邪狞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茅撞,有當地人在樹林里發(fā)現了一具尸體帆卓,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年米丘,在試婚紗的時候發(fā)現自己被綠了鳞疲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蠕蚜,死狀恐怖,靈堂內的尸體忽然破棺而出悔橄,到底是詐尸還是另有隱情靶累,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布癣疟,位于F島的核電站挣柬,受9級特大地震影響,放射性物質發(fā)生泄漏睛挚。R本人自食惡果不足惜邪蛔,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扎狱。 院中可真熱鬧侧到,春花似錦勃教、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汞贸,卻和暖如春绳军,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矢腻。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工门驾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人多柑。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓奶是,卻偏偏與公主長得像,于是被迫代替她去往敵國和親顷蟆。 傳聞我的和親對象是個殘疾皇子诫隅,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容