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

資訊專欄INFORMATION COLUMN

回到基礎(chǔ):理解 JavaScript DOM

wemallshop / 3322人閱讀

摘要:事件處理允許對事件做出反應(yīng)。還可以用代碼為多個(gè)元素分配相同的事件。指定事件監(jiān)聽器接下來看看怎樣為元素分配事件監(jiān)聽器。

翻譯:瘋狂惡的技術(shù)宅
https://medium.freecodecamp.o...

本文首發(fā)微信公眾號:jingchengyideng
歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章

Javascript DOM(文檔對象模型)是一個(gè)允許開發(fā)人員操縱頁面內(nèi)容、結(jié)構(gòu)和風(fēng)格的接口。在本文中,我們將理解什么是 DOM 以及如何用 Javascript 去操作它。本文還可以作為基本 DOM 操作的參考。

什么是 DOM?

基本上網(wǎng)頁由 HTML 和 CSS 文檔組成。瀏覽器用于創(chuàng)建文檔的描述被稱為文檔對象模型(DOM)。它使 Javascript 能夠訪問和操作頁面的元素和樣式。該模型構(gòu)建在基于對象的樹結(jié)構(gòu)中,并定義:

HTML 元素作為對象

HTML 元素的屬性和事件

訪問HTML元素的方法

HTML DOM模型

元素的位置稱為節(jié)點(diǎn)。不僅元素獲得節(jié)點(diǎn),而且元素和文本的屬性也有屬于它們自己的節(jié)點(diǎn)(屬性節(jié)點(diǎn)和文本節(jié)點(diǎn))。

DOM 文檔

DOM 文檔是網(wǎng)頁中所有其他對象的所有者。這意味著如果你想訪問網(wǎng)頁上的任何對象,必須從這里開始。它還包含許多重要的屬性和方法,使我們能夠訪問和修改自己的頁面。

查找 HTML 元素

現(xiàn)在我們了解了 DOM 文檔是什么,接下來就可以開始獲取我們的第一個(gè) HTML 元素了。 Javascript DOM 有許多不同的方法可以用,不過這些最常見:

按 ID 獲取元素

getElementById() 方法用于通過其 id 獲取單個(gè)元素。我們來看一個(gè)例子:

var title = document.getElementById(‘header-title’);

我們得到 id 為 header-title 的元素,并將其保存到變量中。

按類名獲取元素

還可以用 getElementsByClassName() 方法獲取多個(gè)對象,該方法返回一個(gè)元素?cái)?shù)組。

var items = document.getElementsByClassName(‘list-items’);

這里我們得到類 list-items 的所有項(xiàng)目,并將它們保存到變量中。

按標(biāo)簽名稱獲取元素

還可以用 getElementsByTagName() 方法按標(biāo)記名稱獲取元素。

var listItems = document.getElementsByTagName(‘li’);

這里我們獲取 HTML 文檔中所有得 li 元素并將它們保存到變量中。

Queryselector

querySelector() 方法返回與指定的 CSS選擇器匹配的第一個(gè)元素。這意味著你可以通過id、class、tag和所有其他有效的 CSS 選擇器獲取元素。在這里我列出了一些最常用的選項(xiàng)。

按 id 獲?。?/strong>

var header = document.querySelector(‘#header’)

按 class 獲?。?/strong>

var items = document.querySelector(‘.list-items’)

按標(biāo)簽獲?。?/strong>

var headings = document.querySelector(‘h1’);

獲取更具體的元素:

我們還可以使用 CSS Selectors 獲得更多的特定元素。

document.querySelector(“h1.heading”);

在這個(gè)例子中,我們同時(shí)搜索標(biāo)記和類,并返回傳遞給 CSS Selector 的第一個(gè)元素。

Queryselectorall

querySelectorAll() 方法與 querySelector() 完全相同,只是它返回符合 CSS Selector 的所有元素。

var heading = document.querySelectorAll(‘h1.heading’);

在這個(gè)例子中,我們得到所有屬于 heading 類的 h1 標(biāo)簽,并將它們存儲在一個(gè)數(shù)組中。

本文首發(fā)微信公眾號:jingchengyideng
歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章

更改 HTML 元素

HTML DOM 允許我們通過更改其屬性來對 HTML 元素的內(nèi)容和樣式進(jìn)行修改。

更改HTML

innerHTML 屬性可用于修改 HTML 元素的內(nèi)容。

document.getElementById(“#header”).innerHTML = “Hello World!”;

在這個(gè)例子中,我們得到 id 為 header 的元素,并把其內(nèi)容設(shè)置為“Hello World!”。

InnerHTML 還可以把標(biāo)簽放入另一個(gè)標(biāo)簽中。

document.getElementsByTagName("div").innerHTML = "

Hello World!

"

在這里將 h1 標(biāo)記放入所有已存在的 div 中。

更改屬性的值

還可以用 DOM 更改屬性的值。

document.getElementsByTag(“img”).src = “test.jpg”;

在這個(gè)例子中,我們把所有 標(biāo)簽的 src 改為 test.jpg

改變樣式

要更改 HTML 元素的樣式,需要更改元素的樣式屬性。以下是更改樣式的示例語法:

document.getElementById(id).style.property = new style

接下來看一個(gè)例子,我們獲取一個(gè)元素并將底部邊框改為純黑線:

document.getElementsByTag(“h1”).style.borderBottom = “solid 3px #000”;

CSS 屬性需要用 camelcase 而不是普通的 css 屬性名來編寫。在這個(gè)例子中,我們用 borderBottom 而不是 border-bottom

添加和刪除元素

現(xiàn)在我們來看看如何添加新元素和刪除現(xiàn)有元素。

添加元素
var div = document.createElement(‘div’);

在這里我們用了 createElement() 方法創(chuàng)建一個(gè) div 元素,該方法將標(biāo)記名作為參數(shù)并將其保存到變量中。之后只需要給它一些內(nèi)容,然后將其插入到 DOM 文檔中。

var content = document.createTextNode("Hello World!"); 
div.appendChild(newContent);
document.body.insertBefore(div, currentDiv);

這里用了 createTextNode() 方法創(chuàng)建內(nèi)容,該方法用字符串作參數(shù),然后在文檔中已經(jīng)存在的 div 之前插入新的 div 元素。

刪除元素
var elem = document.querySelector("#header");
elem.parentNode.removeChild(elem);

本例中我們得到一個(gè)元素并使用 removeChild() 方法將其刪除。

替換元素

現(xiàn)在讓我們來看看怎樣替換一個(gè)項(xiàng)目。

var div = document.querySelector("#div");
var newDiv = document.createElement(‘div’);
newDiv.innerHTML = "Hello World2"
div.parentNode.replaceChild(newDiv, div);

這里我們使用 replaceChild() 方法替換元素。第一個(gè)參數(shù)是新元素,第二個(gè)參數(shù)是要替換的元素。

直接寫入HTML輸出流

還可以使用 write() 方法將 HTML 表達(dá)式和 JavaScript 直接寫入 HTML 輸出流。

document.write(“

Hello World!

This is a paragraph!

”);

我們也可以把像日期對象這樣的參數(shù)傳給 JavaScript 表達(dá)式。

document.write(Date());

write() 方法還可以使用多個(gè)參數(shù),這些參數(shù)會按其出現(xiàn)的順序附加到文檔中。

事件處理

HTML DOM 允許 Javascript 對 HTML 事件做出反應(yīng)。下面列出了一些比較重要的事件:

鼠標(biāo)點(diǎn)擊

頁面加載

鼠標(biāo)移動(dòng)

輸入字段更改

分配事件

可以用標(biāo)記上的屬性直接在 HTML 代碼中定義事件。以下是 onclick 事件的例子:

Click me!

在此例中,單擊按鈕時(shí),

的文本將被改為 “Hello!”。

還可以在觸發(fā)事件時(shí)調(diào)用函數(shù),如下一個(gè)例子所示。

Click me!

這里我們在單擊按鈕時(shí)調(diào)用 changeText() 方法,并將該元素作為屬性傳遞。

還可以用 Javascript 代碼為多個(gè)元素分配相同的事件。

document.getElementById(“btn”).onclick = changeText();
指定事件監(jiān)聽器

接下來看看怎樣為 HTML 元素分配事件監(jiān)聽器。

document.getElementById(“btn”)addEventListener("click", runEvent);

這里我們剛剛指定了一個(gè) click 事件,在單擊 btn 元素時(shí)調(diào)用 runEvent 方法。

當(dāng)然還可以把多個(gè)事件指定給單個(gè)元素:

document.getElementById(“btn”)addEventListener("mouseover", runEvent);
節(jié)點(diǎn)關(guān)系

DOM Document 中的節(jié)點(diǎn)之間具有層次關(guān)系。這意味著節(jié)點(diǎn)的結(jié)構(gòu)類似于樹。我們用 parent,sibling 和 child 等術(shù)語來描述節(jié)點(diǎn)之間的關(guān)系。

頂級節(jié)點(diǎn)稱為根節(jié)點(diǎn),是唯一一個(gè)沒有父節(jié)點(diǎn)的節(jié)點(diǎn)。普通 HTML 文檔中的根是 標(biāo)記,因?yàn)樗鼪]有父標(biāo)記,并且是文檔的頂部標(biāo)記。

在節(jié)點(diǎn)之間導(dǎo)航

可以用以下屬性在節(jié)點(diǎn)之間導(dǎo)航:

parentNode

childNodes

firstChild

lastChild

nextSibling

下面是得到 h1 的父元素的例子。

var parent = document.getElementById(“heading”).parentNode
總結(jié)

望本文能幫助你理解 Javascript DOM 以及如何用它來操作頁面上的元素。

如果你覺得本文有用,請推薦給你的朋友和他們分享。如果你有什么問題或反饋,請?jiān)谙旅娴脑u論中告訴我。

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

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

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

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

CSS Flexbox 可視化手冊

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

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

CSS粘性定位是怎樣工作的

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

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

7個(gè)開放式的前端面試題

React 教程:快速上手指南

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

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

相關(guān)文章

  • 回到基礎(chǔ):如何用原生 DOM API 生成表格

    摘要:接下來該填表了生成行和單元格為了填充表格可以遵循同樣的方法,但這次我們需要迭代數(shù)組中的每個(gè)對象。對于每個(gè)對象,我們可以使用生成單元格。 翻譯:瘋狂的技術(shù)宅原文:https://www.valentinog.com/bl... 本文首發(fā)微信公眾號:jingchengyideng歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 怎樣用原生 JavaScript 生成表格需?本文告訴你答案!...

    Sunxb 評論0 收藏0
  • React 內(nèi)部機(jī)制探秘 - React Component 和 Element(文末附彩蛋demo

    摘要:內(nèi)部機(jī)制探秘和文末附彩蛋和源碼這篇文章比較偏基礎(chǔ),但是對入門內(nèi)部機(jī)制和實(shí)現(xiàn)原理卻至關(guān)重要。當(dāng)然也需要明白一些淺顯的內(nèi)部工作機(jī)制。當(dāng)改變出現(xiàn)時(shí),相比于真實(shí)更新虛擬的性能優(yōu)勢非常明顯。直到最終,會得到完整的表述樹的對象。 React 內(nèi)部機(jī)制探秘 - React Component 和 Element(文末附彩蛋demo和源碼) 這篇文章比較偏基礎(chǔ),但是對入門 React 內(nèi)部機(jī)制和實(shí)現(xiàn)原...

    wenshi11019 評論0 收藏0
  • [譯] 前端攻略-從路人甲到英雄無敵二:JavaScript 與不斷演化的框架

    摘要:一般來說,聲明式編程關(guān)注于發(fā)生了啥,而命令式則同時(shí)關(guān)注與咋發(fā)生的。聲明式編程可以較好地解決這個(gè)問題,剛才提到的比較麻煩的元素選擇這個(gè)動(dòng)作可以交托給框架或者庫區(qū)處理,這樣就能讓開發(fā)者專注于發(fā)生了啥,這里推薦一波與。 本文翻譯自FreeCodeCamp的from-zero-to-front-end-hero-part。 繼續(xù)譯者的廢話,這篇文章是前端攻略-從路人甲到英雄無敵的下半部分,在...

    roadtogeek 評論0 收藏0
  • 瀏覽器中的JavaScript:文檔對象模型與 DOM 操作

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

    Ilikewhite 評論0 收藏0

發(fā)表評論

0條評論

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