前天剛開始接觸JavaScript的時候,心中就一直有一個疑問:
后臺編程語言之間互相爭論不斷,為何一提到前端基本都會想到JS?
因?yàn)椴艅傞_始學(xué)js,所以很多話不敢說的太絕對,就加上了“基本,大概,可能”這樣的形容詞。
畢竟話說的太絕對容易被吐槽,誰知道竟然還是被吐槽了:
納尼?js連編程語言都不算了?
我只是盡可能不把話說的太絕對,可能js并不是前端公認(rèn)的語言,但沒想到連編程語言都不算了?
這是我萬萬沒有想到的。
在這一刻我的內(nèi)心產(chǎn)生了動搖,我突然想到了那張編程語言排行榜的圖片。
前段時間c語言排名超過Java,導(dǎo)致經(jīng)常性地能看到,我明明在這張表中看到了JavaScript。
莫非這不能算是編程語言排行榜?
于是我又網(wǎng)上查了下,查詢到的結(jié)果都是說js是一門編程語言。
現(xiàn)在結(jié)果就顯而易見了,說js不是編程語言就好比說前端不是程序員一樣,帶有很濃的個人主義色彩,當(dāng)個笑話即可。
嘛,不管如何,js還是很重要的,話不多說,繼續(xù)學(xué)習(xí):今天是劉小愛自學(xué)Java的第83天:
昨天學(xué)習(xí)了BOM編程,今天學(xué)DOM編程。
DOM,全稱Document Object Model,即文檔對象模型,具體什么意思呢?
還是一樣的學(xué)習(xí)方法,先學(xué)習(xí)其對應(yīng)的知識點(diǎn),再理解其概念。
1根據(jù)標(biāo)簽名獲取元素
①頁面加載事件
因?yàn)閟cript標(biāo)簽在body標(biāo)簽前面,而頁面加載又是從上到下的。
如果在script標(biāo)簽想獲取body標(biāo)簽中的內(nèi)容,需要先觸發(fā)頁面加載事件。
②點(diǎn)擊事件
要達(dá)到的效果為,點(diǎn)擊按鈕會給a便簽添加相應(yīng)的地址。
這里使用的的匿名函數(shù)注冊方式觸發(fā)點(diǎn)擊事件。
③getElementsByTagName()
根據(jù)標(biāo)簽名獲取元素,因?yàn)轫撁嬷衋標(biāo)簽有3個,所以使用該方法獲取的是一個數(shù)組。
再將數(shù)組遍歷,逐一給href屬性賦值。
注意:如果相同標(biāo)簽的數(shù)量有多個,其返回值為數(shù)組,一開始完全就給忽視了。
代碼寫完,做一個測試:
點(diǎn)一下按鈕,觸發(fā)點(diǎn)擊上事件,a標(biāo)簽添加了一個超鏈接,顏色從黑變成了紫,
再點(diǎn)下,會跳轉(zhuǎn)超鏈接對應(yīng)的頁面
2根據(jù)name獲取元素
標(biāo)簽基本都會有一個name屬性,根據(jù)name屬性獲取對應(yīng)的元素:
有三個div標(biāo)簽,但是name為"myDiv"的只有兩個,我們只需要對應(yīng)name的標(biāo)簽。
所以不能getElementsByTagName()方法,而是getElementsByName();
這樣的話第三個div標(biāo)簽就不會對它有影響,
做一個測試:
可以通過name屬性給對應(yīng)的標(biāo)簽賦值。
3根據(jù)類名獲取元素
getElementsByClassName(),這個方法的思路就跟name是一樣的。
只不過一個是標(biāo)簽里的name屬性,一個是標(biāo)簽里的class屬性。
上述的3中方法便是對DOM編程的一個初步說明,當(dāng)然肯定不會就只有這3種。
但這幾種比較常見,并且很具有代表性。
先看一個HTML,其具體內(nèi)容不用細(xì)看:
上述代碼也就是一個文檔,DOM模型是使用一個DOM樹來表示文檔的。
樹形結(jié)構(gòu)圖如下:
當(dāng)然圖我并沒有畫完全,但大致就是這么一個樹形的結(jié)構(gòu)。
并且我舉這個例子中文檔內(nèi)容也比較簡單,一共也就那么幾行代碼,實(shí)際情況肯定要復(fù)雜的多。
而DOM編程就是可以用特定方式操作這個樹,從而可以改變文檔的結(jié)構(gòu)、樣式或者內(nèi)容。
其中就包括最先說明的那三種方法:根據(jù)標(biāo)簽名,根據(jù)id名,根據(jù)類名……等等。
CSS可以設(shè)定標(biāo)簽的樣式,是怎么操作的?
①CSS設(shè)定樣式
這里使用的是id選擇器,可以設(shè)定對應(yīng)id的標(biāo)簽樣式。
顏色color:紅。
字體font-family:微軟雅黑。
字體大小font-size:50px。
除了這種設(shè)定標(biāo)簽的樣式外,現(xiàn)在還可以通過js代碼去動態(tài)修改標(biāo)簽的樣式。
代碼編寫如下:
②js設(shè)定樣式
根據(jù)id獲取對應(yīng)的元素。
在html中每一個標(biāo)簽都會有一個屬性叫style,所以設(shè)置其style即可。
值得注意的是:fontFamily相當(dāng)于CSS中的font-family,采用的是小駝峰命名規(guī)則。
其中如果用css和js同時操作同一標(biāo)簽,會以js設(shè)定的為主。
這也好理解,css相當(dāng)于給標(biāo)簽格式初始化,而js就相當(dāng)于修改標(biāo)簽格式。
當(dāng)然這還不能看出js的使用特殊之處,我們再看一個案例:
①CSS設(shè)定格式
CSS根據(jù)類選擇器設(shè)定樣式,類為myClass。
但是要注意,HTML中本身并沒有myClass類的標(biāo)簽。
②js操作CSS
js厲害的地方在于它可以設(shè)定和修改標(biāo)簽的類名。根據(jù)需求,js可以讓同一標(biāo)簽:
從而達(dá)到同一標(biāo)簽樣式可以根據(jù)需求不停地切換。
謝謝你的觀看。
如果可以的話,麻煩幫忙點(diǎn)個贊,謝謝你。