'JavaScript系統學習DOM系列文章之20個不得不學的新API'

"
"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:想要成功的調起通知,首先要用戶的授權

Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:想要成功的調起通知,首先要用戶的授權

Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
JavaScript系統學習DOM系列文章之20個不得不學的新API

所以,再調用之前先向用戶發起請求:

let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:想要成功的調起通知,首先要用戶的授權

Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
JavaScript系統學習DOM系列文章之20個不得不學的新API

所以,再調用之前先向用戶發起請求:

let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
JavaScript系統學習DOM系列文章之20個不得不學的新API

有點醜哈,但是這是原生的!

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:想要成功的調起通知,首先要用戶的授權

Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
JavaScript系統學習DOM系列文章之20個不得不學的新API

所以,再調用之前先向用戶發起請求:

let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
JavaScript系統學習DOM系列文章之20個不得不學的新API

有點醜哈,但是這是原生的!

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

20、fullScreen

全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;

/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}

作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:想要成功的調起通知,首先要用戶的授權

Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
JavaScript系統學習DOM系列文章之20個不得不學的新API

所以,再調用之前先向用戶發起請求:

let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
JavaScript系統學習DOM系列文章之20個不得不學的新API

有點醜哈,但是這是原生的!

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

20、fullScreen

全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;

/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}

作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:

JavaScript系統學習DOM系列文章之20個不得不學的新API

那麼作用在指定元素會是什麼效果呢?

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:想要成功的調起通知,首先要用戶的授權

Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
JavaScript系統學習DOM系列文章之20個不得不學的新API

所以,再調用之前先向用戶發起請求:

let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
JavaScript系統學習DOM系列文章之20個不得不學的新API

有點醜哈,但是這是原生的!

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

20、fullScreen

全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;

/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}

作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:

JavaScript系統學習DOM系列文章之20個不得不學的新API

那麼作用在指定元素會是什麼效果呢?

JavaScript系統學習DOM系列文章之20個不得不學的新API

就像效果圖一樣,會直接開啟全屏,並且只顯示指定的元素,元素的寬高填充了整個屏幕✅

關閉全屏的時候需要注意的是,統一用document對象

/**
* @method exitFullScreen 關閉全屏
*/
const exitFullScreen = () => {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
}

使用場景:需要讓用戶專注去做某件事,比如代碼編輯區的全屏或者是ERP管理系統

兼容性

"
JavaScript系統學習DOM系列文章之20個不得不學的新API

程序猿就是一個活到老學到老的職業,如果你不想被淘汰,就得逼著自己去優秀。WEB技術隨著大潮發生了很多變化,尤其是2.0後時代階段,Ember、Angular、React、Vue的興起,極大的推動了WEB行業的變革。大多數的人開始被分成兩大組——使用框架和制定框架,人們越來越喜歡拿來即用的東西,卻很容易忽略箱子裡面的東西...

本期繼續分享DOM相關的一些小知識點,隨著HTML5時代的到來,WEB API迎來了一次較大範圍的更新,為WEB開發帶來了一些福利。新的API在現代的瀏覽器的支持下“表現得更優秀”,也加快了互聯網的發展。

1、querySelector和querySelectorAll

querySelector獲取指定元素中匹配css選擇器的元素;querySelectorAll獲取指定元素中匹配css選擇器的所有元素

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:無論如何只返回一個元素,如果有多個素,那也只返回第一個;querySelectorAll返回的值是一個類數組,無法使用數組的原生方法(forEach、map等),需要轉換一下

Array.from(list).map();
JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

2、closest

跟querySelector相反,該元素可以向上查詢,也就是可以查詢到父元素

document.querySelector("li").closest("#nav");

其實類似於parentNode和parentElement,可以看看它的profill

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

3、dataset

就跟原生微信小程序一樣,能獲取標籤上以"data-"為前綴的屬性集合:

<p data-name="蜘蛛俠" data-age="16"></p>

document.querySelector("p").dataset; // {name: "蜘蛛俠", age: "16"}

注意:雖然可以用getAttribute方法獲取任何屬性值,但是性質卻不一樣,這是開發規範問題,凡是自定義屬性都要加上data-前綴哦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

4、URLSearchParams

假設瀏覽器的url參數是 "?name=蜘蛛俠&age=16",還記得我們是怎麼處理的嗎?

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在告訴大家一個新的API,這個使用就更方便了

new URLSearchParams(location.search).get("name"); // 蜘蛛俠
JavaScript系統學習DOM系列文章之20個不得不學的新API

運行結果

JavaScript系統學習DOM系列文章之20個不得不學的新API

URLSearchParams 接口定義了一些實用的方法來處理 URL 的查詢字符串

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

5、hidden

這是一個html屬性,規定元素是否隱藏,表現跟css的display: none一致:

<div hidden>我被隱藏了</div>

document.querySelector("div").hidden = true / false;

現在我們操作dom的顯示與隱藏也可以像JQuery一樣方便啦

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

6、contenteditable

可以使一個元素可以被用戶編輯:

<p contenteditable>我是P元素,但是我也可以被編輯</p>
複製代碼

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

很多簡單的editor就是基於此屬性實現的,功能比textarea更強大,容錯也更好

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

7、speelcheck

也是一個html屬性,規定輸入的內容是否檢查英文的拼寫(像不像Office裡面的拼寫檢查)

<!-- 默認就是true,可省略 -->
<textarea spellcheck="true"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

設置不檢查:

<textarea spellcheck="false"></textarea>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

8、classList

大家還記得JQuery時代前操作原生JS操作class的痛苦吧,需要單獨封裝一個工具庫

JavaScript系統學習DOM系列文章之20個不得不學的新API

現在提供的classList是一個對象,該對象裡封裝了許多操作元素類名的方法:

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

9、getBoundingClientRect(這個不是新的,但是大多數人沒怎麼用過)

可以獲取指定元素在當前頁面的空間信息:

elem.getBoundingClientRect();

// 返回
{
x: 604.875,
y: 1312,
width: 701.625,
height: 31,
top: 1312,
right: 1306.5,
bottom: 1343,
left: 604.875
}

說明:top是距離文檔頂部的距離,y則是距離可視窗口(瀏覽器屏幕)的頂部距離,如果瀏覽器滾動,top值不變,y值會變

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

10、contains

可以判斷指定元素是否包含了指定的子元素:

<div>
<p></p>
</div>

document.querySelector("div").contains(document.querySelector("p")); // true

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

11、online state

是不是很想像APP一樣監聽當前網頁的網絡狀態變動,尤其是一些ERP,然後執行對應的方法:

window.addEventListener("online", xxx);
window.addEventListener("offline", () => {
alert("你斷網啦!");
});

// addEventListener version
window.addEventListener('online', (event) => {
console.log("You are now connected to the network.");
});
// ononline version
window.ononline = (event) => {
console.log("You are now connected to the network.");
};

可以模擬看下效果

JavaScript系統學習DOM系列文章之20個不得不學的新API

JavaScript系統學習DOM系列文章之20個不得不學的新API

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

12、battery state

獲取設備的電池狀態

This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.

navigator.getBattery().then(battery => console.log(battery));

// 返回
{
charging, // 是否在充電
chargingTime, // 充滿電所需時間
dischargingTime, // 當前電量可使用時間
level, 剩餘電量
onchargingchange, // 監聽充電狀態變化
onchargingtimechange, // 監聽充滿電所需時間變化
ondischargingtimechange, // 監聽當前電量可使用時間變化
onlevelchange // 監聽電量變化
}

使用場景:提示用戶電量已充滿,或者為了讓用戶有安全感,電量低於15%的時候來個彈框提示需要保存某些重要操作,防止斷電帶來的不必要損失

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

13、vibration

使設備進行震動,更貼近原生應用開發:

// 震動一次
navigator.vibrate(100);
// 連續震動,震動200ms、暫停100ms、震動300ms
navigator.vibrate([200, 100, 300]);
// vibrate for 200ms
navigator.vibrate(200);
// Vibrate 'SOS' in Morse.
navigator.vibrate([100,30,100,30,100,30,200,30,200,30,200,30,100,30,100,30,100]);

使用場景:通過振動來提供感官反饋,比如太久沒有觸摸屏幕的時候連續震動提醒用戶

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

14、page visibility

有沒有小夥伴發現做在線筆試的時候不允許隨意切換瀏覽器的tab,一旦隨意切換,就會彈出一個提示!!!嘿嘿,別問我怎麼知道的。

大家好不好奇,是如何監聽到頁面的變化?

page visibility顧名思義,這個API是用來監聽頁面可見性變化的,在PC端標籤欄切換、最小化會觸發、在移動端程序切到後臺會觸發,簡單說就是頁面消失了‍♂️

document.addEventListener("visibilitychange", () => {
console.log(`頁面可見性:${document.visibilityState}`);
});

PC端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

移動端效果如下

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:當程序切到後臺的時候,如果當前有視頻播放或者一些動畫執行,可以先暫停

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

15、deviceOrientation

陀螺儀,也就是設備的方向,又名重力感應,該API在IOS設備上失效的解決辦法,將域名協議改成https

JavaScript系統學習DOM系列文章之20個不得不學的新API

從左到右分別為alpha、beta、gamma;

window.addEventListener("deviceorientation", event => {
let {
alpha,
beta,
gamma
} = event;
console.log(`alpha:${alpha}`);
console.log(`beta:${beta}`);
console.log(`gamma:${gamma}`);
});

移動端效果如下(此時手機在不停的轉動)

JavaScript系統學習DOM系列文章之20個不得不學的新API

使用場景:頁面上的某些元素需要根據手機擺動進行移動,達到視差的效果,比如王者榮耀進入遊戲的那個界面,手機轉動背景圖會跟著動

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

16、orientation

可以監聽用戶手機設備的旋轉方向變化;

 window.addEventListener("orientationchange", () => {
document.body.innerHTML += `<p>屏幕旋轉後的角度值:${window.orientation}</p>`;
}, false);

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

也可以使用css的媒體查詢:

/* 豎屏時樣式 */
@media all and (orientation: portrait) {
body::after {
content: "豎屏"
}
}
/* 橫屏時樣式 */
@media all and (orientation: landscape) {
body::after {
content: "橫屏"
}
}

使用場景:頁面需要用戶開啟橫屏來獲得更好的體驗,主要用在PAD上開發類似ERP

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

17、toDataURL

這個canvas的API,作用是將畫布的內容轉換成一個base64的圖片地址;

let canvas = document.querySelector("canvas");
let context = canvas.getContext("2d");
// 畫東西
...
let url = canvas.toDataURL("image/png"); // 將畫布內容轉換成base64地址

使用a標籤進行圖片下載時,圖片鏈接跨域(圖片是我的掘金頭像),無法進行下載而是進行圖片預覽

<img src="xxx">
<button>
<a href="xxx" download="avatar">下載圖片</a>
</button>

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

封裝以下代碼便可解決

JavaScript系統學習DOM系列文章之20個不得不學的新API

效果如下:

JavaScript系統學習DOM系列文章之20個不得不學的新API

或者將當前的DOM轉換成圖片進行下載,常用於生成海報: 如html2canvas庫

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

18、customEvent

自定義事件,就跟vue裡面的on跟emit一樣;

監聽自定義事件:

window.addEventListener("follow", event => {
console.log(event.detail); // 輸出 {name: "前端宇宙情報局"}
});

派發自定義事件:

window.dispatchEvent(new CustomEvent("follow", {
detail: {
name: "前端宇宙情報局"
}
}));

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

19、notification

PC端的桌面通知,如網頁端的微信,當收到消息時,右下角會出現一個通知(儘管你把瀏覽器最小化),因為這個通知時獨立於瀏覽器的,是系統的一個原生控件;

JavaScript系統學習DOM系列文章之20個不得不學的新API

注意:想要成功的調起通知,首先要用戶的授權

Notification.requestPermission(prem => {
prem == "granted" // 同意
prem == "denied" // 拒絕
})
JavaScript系統學習DOM系列文章之20個不得不學的新API

所以,再調用之前先向用戶發起請求:

let permission = Notification.permission;
if (permission == "granted") {
// 已同意,開始發送通知
...
} else if (permission == "denied") {
// 不同意,發不了咯
} else {
// 其他狀態,可以重新發送授權提示
Notification.requestPermission();
}
JavaScript系統學習DOM系列文章之20個不得不學的新API

有點醜哈,但是這是原生的!

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

20、fullScreen

全屏不咯? 之前的一個項目剛好用上,不僅僅可以作用在documentElement上,還可以作用在指定元素;

/**
* @method launchFullScreen 開啟全屏
* @param {Object} elem = document.documentElement 作用的元素
*/
const launchFullScreen = (elem = document.documentElement) => {
if(elem.requestFullScreen) {
elem.requestFullScreen();
} else if(elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if(elem.webkitRequestFullScreen) {
elem.webkitRequestFullScreen();
}
}

作用在documentElement上沒啥可以介紹的咯,就相當於F11開啟全屏:

JavaScript系統學習DOM系列文章之20個不得不學的新API

那麼作用在指定元素會是什麼效果呢?

JavaScript系統學習DOM系列文章之20個不得不學的新API

就像效果圖一樣,會直接開啟全屏,並且只顯示指定的元素,元素的寬高填充了整個屏幕✅

關閉全屏的時候需要注意的是,統一用document對象

/**
* @method exitFullScreen 關閉全屏
*/
const exitFullScreen = () => {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
}

使用場景:需要讓用戶專注去做某件事,比如代碼編輯區的全屏或者是ERP管理系統

兼容性

JavaScript系統學習DOM系列文章之20個不得不學的新API

好啦,乾貨就到這裡啦,希望大家看完不要忘了


前端學習視頻傳送門

vue視頻教程來啦,每週末都有前端視頻教程學

微信小程序視頻教程來啦,每週末都有前端視頻教程學

vue視頻教程來啦,每週末送前端視頻教程,私信可得

從入門到精通實戰Go web編程視頻來啦,每週末都有前端視頻教程學

參考文章

https://juejin.im/post/5d5df391e51d453b1e478ad0?

https://developer.mozilla.org/en-US/docs/Web/API/Window/orientationchange_event

"

相關推薦

推薦中...