成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

瀏覽器中的JavaScript:文檔對(duì)象模型與 DOM 操作

Ilikewhite / 2419人閱讀

摘要:作為運(yùn)行在瀏覽器中的腳本語言,它對(duì)于網(wǎng)頁操作非常有用。在技術(shù)圈中,我們將這些指令稱為操作。結(jié)論文檔對(duì)象模型是瀏覽器創(chuàng)建并保留在內(nèi)存中的網(wǎng)頁的虛擬副本。資源如果你想了解更多關(guān)于文檔對(duì)象模型的內(nèi)容,那么還有另一篇好文章。

翻譯:瘋狂的技術(shù)宅
原文:https://www.valentinog.com/bl...

JavaScript 并沒有那么糟糕。作為運(yùn)行在瀏覽器中的腳本語言,它對(duì)于網(wǎng)頁操作非常有用。在本文中,我們將看到可以用哪些手段來修改 HTML 文檔和交互。

什么是文檔對(duì)象模型?

文檔對(duì)象模型是在瀏覽器中一切的基礎(chǔ)。但它究竟是什么呢?

當(dāng)我們?cè)L問網(wǎng)頁時(shí),瀏覽器會(huì)計(jì)算出如何解釋每個(gè) HTML 元素。這樣它就可以創(chuàng)建 HTML 文檔的虛擬表示,并保存在內(nèi)存中。 HTML 頁面被轉(zhuǎn)換為樹狀結(jié)構(gòu)并且每個(gè) HTML 元素都變成一個(gè)葉子結(jié)點(diǎn),連接到父分支??匆幌逻@個(gè)簡(jiǎn)單的 HTML 頁面:



  
        A super simple title!
  
  
      

A super simple web page!

在這個(gè)結(jié)構(gòu)的頂部有一個(gè)文檔,也稱為根元素,它包含另一個(gè)元素:html。 html 元素包含一個(gè) head ,而 head 內(nèi)又有一個(gè) title。然后 body 中包含一個(gè) h1。每個(gè) HTML 元素都由特定類型(也稱為接口)表示,并且可以包含文本或其他嵌套元素:

document (HTMLDocument)
  |
  | --> html (HTMLHtmlElement)
          |  
          | --> head (HtmlHeadElement)
          |       |
          |       | --> title (HtmlTitleElement)
          |                | --> text: "A super simple title!"
          |
          | --> body (HtmlBodyElement)
          |       |
          |       | --> h1 (HTMLHeadingElement)
          |              | --> text: "A super simple web page!"

每個(gè)HTML元素都來自 Element,但其中很大一部分都是專用的。你可以通過檢查原型以查找元素所屬的“種類”。例如,h1元素是 HTMLHeadingElement:

document.querySelector("h1").__proto__
// Output: HTMLHeadingElement

而 HTMLHeadingElement 又是 HTMLElement 的“后代”:

document.querySelector("h1").__proto__.__proto__
// Output: HTMLElement

這時(shí)(特別是初學(xué)者)可能會(huì)對(duì) document 和 window 之間的區(qū)別產(chǎn)生一些混淆。讓我們看看它們有什么不同!

window和document之間的區(qū)別

window 是指瀏覽器,而 document 是你當(dāng)前正在操作的 HTML 頁面,即當(dāng)前文檔。文檔界面有許多實(shí)用功能,比如 querySelector(),一種用于選擇給定頁面內(nèi)任何 HTML 元素的方法:

document.querySelector("h1");

window 表示當(dāng)前窗口的瀏覽器,以下代碼效果與上述相同:

window.document.querySelector("h1");

無論如何,以下語法更常見,你還會(huì)看到更多:

document.methodName();
DOM 操作

DOM中的每個(gè) HTML 元素也都是“節(jié)點(diǎn)”,實(shí)際上我們可以像這樣去檢查節(jié)點(diǎn)類型:

document.querySelector("h1").nodeType;

上面的代碼會(huì)返回 1,它是 Element 類型的節(jié)點(diǎn)的標(biāo)識(shí)符。你還可以檢查節(jié)點(diǎn)名稱:

document.querySelector("h1").nodeName;
"H1"

上面的例子用大寫的形式返回節(jié)點(diǎn)名稱。需要理解的也是最重要的概念是,我們主要使用 DOM 中的兩種類型的節(jié)點(diǎn):

Element 類型的節(jié)點(diǎn)(HTML 元素)

Text 類型的節(jié)點(diǎn)(文本節(jié)點(diǎn))

為了創(chuàng)建 Element 類型的新節(jié)點(diǎn),本機(jī) DOM API 為我們提供了 createelement 方法,你通常會(huì)這樣調(diào)用:

var heading = document.createElement("h1");

為了創(chuàng)建文本,我們可以用 createTextNode

var text = document.createTextNode("Hello world");

通過在新的 HTML 元素中附加文本,可以將兩個(gè)節(jié)點(diǎn)組合在一起。最后需要注意的是,我們還可以將標(biāo)題元素附加到根文檔:

var heading = document.createElement("h1");
var text = document.createTextNode("Hello world");
heading.appendChild(text);
document.body.appendChild(heading);

在瀏覽器中使用 JavaScript 時(shí),你需要了解這三種方法。在技術(shù)圈中,我們將這些指令稱為 DOM 操作

當(dāng)以這種方式創(chuàng)建和操作元素時(shí),我們談?wù)摰氖恰?strong>命令式” DOM操作。現(xiàn)代前端庫正在通過支持“聲明”方法來解決這個(gè)問題。我們不是一步一步地去命令瀏覽器,而是聲明我們需要什么 HTML 元素,而庫可以處理剩下的部分。

DOM 操作和 jQuery

此時(shí)你可能會(huì)想:“我可以只使用jQuery嗎?為什么要用 createElement?“ 我經(jīng)常會(huì)被問到這些問題。

好吧,請(qǐng)注意 jQuery 正逐漸消失。 Bootstrap 5 將從依賴項(xiàng)中刪除它,還有更多的庫或框架正在刪除它。這背后有一個(gè)十分正當(dāng)?shù)睦碛桑涸?DOM API 已經(jīng)非常完整且成熟到足以使 jQuery 過時(shí)。

如果你想堅(jiān)持用原生 JavaScript 實(shí)現(xiàn)簡(jiǎn)單的交互和操作。甚至可以創(chuàng)建自己的迷你框架來抽象出最常見的操作:創(chuàng)建元素、追加、創(chuàng)建文本等。

結(jié)論

文檔對(duì)象模型是瀏覽器創(chuàng)建并保留在內(nèi)存中的網(wǎng)頁的虛擬副本。在創(chuàng)建、修改、刪除 HTML 元素時(shí),我們會(huì)碰到 “DOM 操作”。在過去即使對(duì)于更簡(jiǎn)單的任務(wù),我們也要依賴于 jQuery,但今天本機(jī) API 已經(jīng)互相兼容并且足夠成熟以使 jQuery 過時(shí)。

雖然 jQuery 不會(huì)很快的消失,但每個(gè) JavaScript 程序員都必須知道該如何使用本機(jī) API 去操作 DOM。這樣做有很多理由,其他庫會(huì)增加 JavaScript 程序的加載時(shí)間和大小,更不用說 DOM 操作在技術(shù)面試中出現(xiàn)的越來越多。

DOM 中可用的每 個(gè)HTML 元素都有一個(gè)暴露一定數(shù)量屬性和方法的接口。如果對(duì)使用什么方法有疑問,可以參考 MDN上的優(yōu)秀文檔。

操作 DOM 最常用的方法是 document.createElement() 用于創(chuàng)建新的 HTML 元素,document.createTextNode() 用于在 DOM 內(nèi)創(chuàng)建文本節(jié)點(diǎn)。需要注意的是 .appendChild() 用于將新的 HTML 元素或文本節(jié)點(diǎn)附加到現(xiàn)有元素。

雖然很好的了解本機(jī) API 是很好的,但是現(xiàn)代前端庫也提供了無可置疑的好處。盡管用“原生” JavaScript 去構(gòu)建大型JavaScript 程序確實(shí)是可行的,但有時(shí) Angular、React、Vue可以提供很多幫助。僅使用 JavaScript 來處理更簡(jiǎn)單的原型和中小型應(yīng)用也是明智之舉。

資源

如果你想了解更多關(guān)于文檔對(duì)象模型的內(nèi)容,那么 Aderinokun 還有另一篇好文章。非常詳細(xì),值得一讀:文檔對(duì)象模型究竟是什么?

如果你想回到基礎(chǔ)知識(shí),請(qǐng)查看如何使用原生 JavaScript 生成表格 一文!在沒有任何前端框架的幫助的情況下,你會(huì)發(fā)現(xiàn)實(shí)現(xiàn)它都需要什么。

本文首發(fā)微信公眾號(hào):前端先鋒 歡迎掃描二維碼關(guān)注公眾號(hào),每天都給你推送新鮮的前端技術(shù)文章

歡迎繼續(xù)閱讀本專欄其它高贊文章:

12個(gè)令人驚嘆的CSS實(shí)驗(yàn)項(xiàng)目

必須要會(huì)的 50 個(gè)React 面試題

世界頂級(jí)公司的前端面試都問些什么

11 個(gè)最好的 JavaScript 動(dòng)態(tài)效果庫

CSS Flexbox 可視化手冊(cè)

從設(shè)計(jì)者的角度看 React

過節(jié)很無聊?還是用 JavaScript 寫一個(gè)腦力小游戲吧!

CSS粘性定位是怎樣工作的

一步步教你用HTML5 SVG實(shí)現(xiàn)動(dòng)畫效果

程序員30歲前月薪達(dá)不到30K,該何去何從

14個(gè)最好的 JavaScript 數(shù)據(jù)可視化庫

8 個(gè)給前端的頂級(jí) VS Code 擴(kuò)展插件

Node.js 多線程完全指南

把HTML轉(zhuǎn)成PDF的4個(gè)方案及實(shí)現(xiàn)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104026.html

相關(guān)文章

  • JavaScript的組成 | DOM/BOM

    摘要:中主要關(guān)注的就是,對(duì)象的主要功能就是處理網(wǎng)頁內(nèi)容。中文翻譯模型,如果你把這個(gè)詞從中抽離出來,看下面的圖片是不是就很好理解。年月制定的標(biāo)準(zhǔn),由兩大部分組成核心和。擴(kuò)展鼠標(biāo)和用戶界面事件范圍遍歷,增加了對(duì)支持。 往期回顧 在上一期的《JavaScript的組成 | 核心-ECMAScript 》?里,我們有說到JavaScript 是由三大部分組成,分別是:核心ECMAScript、文檔對(duì)...

    worldligang 評(píng)論0 收藏0
  • JavaScript簡(jiǎn)介

    摘要:發(fā)布后不久,微軟就在其中加入了名為的實(shí)現(xiàn)命名為是為了避開與有關(guān)的授權(quán)問題。以現(xiàn)在的眼光來看,微軟年月為進(jìn)入瀏覽器領(lǐng)域而實(shí)施的這個(gè)重大舉措,是導(dǎo)致日后蒙羞的一個(gè)標(biāo)志性時(shí)間。微軟推出其實(shí)現(xiàn)意味著有了兩個(gè)不同的版本中的中的。 JavaScript簡(jiǎn)介 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書中很多地方一筆帶過,所以用自己所理解的,嘗試細(xì)致解讀下。如有紕漏或錯(cuò)...

    teren 評(píng)論0 收藏0
  • JavaScript 闖關(guān)記》之簡(jiǎn)介

    摘要:瀏覽器只是實(shí)現(xiàn)的宿主環(huán)境之一,其他宿主環(huán)境包括和。年月,版發(fā)布,成為國(guó)際標(biāo)準(zhǔn)。事件定義了事件和事件處理的接口。對(duì)于已經(jīng)正式納入標(biāo)準(zhǔn)的來說,盡管各瀏覽器都實(shí)現(xiàn)了某些眾所周知的共同特性,但其他特性還是會(huì)因?yàn)g覽器而異。 JavaScript 是面向 Web 的編程語言,絕大多數(shù)現(xiàn)代網(wǎng)站都使用了 JavaScript,并且所有的現(xiàn)代 Web 瀏覽器(電腦,手機(jī),平板)均包含了 JavaScri...

    baihe 評(píng)論0 收藏0
  • 001-讀書筆記-JavaScript高級(jí)程序設(shè)計(jì) JavaScript簡(jiǎn)介

    摘要:由于計(jì)算機(jī)的國(guó)際化,組織的標(biāo)準(zhǔn)牽涉到很多其他國(guó)家,因此組織決定改名表明其國(guó)際性。規(guī)范由萬維網(wǎng)聯(lián)盟制定。級(jí)標(biāo)準(zhǔn)級(jí)標(biāo)準(zhǔn)是不存在的,級(jí)一般指的是最初支持的。 這篇筆記的內(nèi)容對(duì)應(yīng)的是《JavaScript高級(jí)程序設(shè)計(jì)(第三版)》中的第一章。 1.ECMA 和 ECMA-262 ECMA 是歐洲計(jì)算機(jī)制造商協(xié)會(huì)的縮寫,全程是 European Computer Manufacturers Ass...

    masturbator 評(píng)論0 收藏0
  • JavaScript】簡(jiǎn)介

    摘要:誕生于年,它的主要目的是處理以前由服務(wù)器端語言負(fù)責(zé)的一些輸入驗(yàn)證操作。的不同版本又稱為版次,以第版表示。目前最新的是簡(jiǎn)稱文檔對(duì)象模型文檔對(duì)象模型,是針對(duì)但經(jīng)過拓展用于的應(yīng)用程序接口,。元素當(dāng)瀏覽器不支持或被禁用時(shí),顯示里面的內(nèi)容。 JavaScript誕生于1995年,它的主要目的是處理以前由服務(wù)器端語言負(fù)責(zé)的一些輸入驗(yàn)證操作。 完整的JavaScript實(shí)現(xiàn)由下列三個(gè)不同的部分組成:...

    oogh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<