《Java Script DOM編程藝術(shù)》讀書(shū)筆記——DOM

1、文檔:DOM中的“D”

"D"代表document(文檔)

2刻帚、對(duì)象:DOM中的“O”

“O”代表object(對(duì)象)
對(duì)象的分類(lèi)

  • 用戶(hù)定義對(duì)象(user-defined object)
  • 內(nèi)建對(duì)象(native object)
  • 宿主對(duì)象(host object)

window對(duì)象
window對(duì)象對(duì)應(yīng)著瀏覽器窗口本身秋柄,這個(gè)對(duì)象的屬性和方法通常統(tǒng)稱(chēng)為BOM(瀏覽器對(duì)象模型)
BOM提供了window.openwindow.blur等方法领铐。以至于被濫用于各種彈出窗口和下拉菜單

3栏饮、模型:DOM中的“M”

“M”代表“Model”(模型)
DOM把一份文檔表示為一棵樹(shù)(數(shù)學(xué)意義上的概念)
示例代碼

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>Shoping List<title>
  </head>
  <body>
     <h1>What to buy</h1>
     <p title="a gentle reminder">Don’t forget to buy this stuff.<p>
     <ul id="purchases">
        <li> A tin of beans<li>
        <li class="sale">Cheese<li>
        <li class="sale important">Milk<li>
        </ul>
    <body>
  </html>
代碼中<html>相當(dāng)于樹(shù)根熄攘,即根元素。<head>和<body>屬于下一個(gè)分支孕蝉,位于同一層次且互不包含屡律,屬于兄弟關(guān)系。<head>元素有兩個(gè)子元素<meta>和<title>(屬于兄弟關(guān)系)<body>元素有三個(gè)子元素<p>降淮、<h1>超埋、<ul>(這三個(gè)屬于兄弟關(guān)系。<ul>也是一個(gè)父元素佳鳖,有三個(gè)子元素霍殴,他們都是<li>元素。

如果你能把一個(gè)文檔的各種元素想象成一棵家譜樹(shù)系吩,我們就可以用同樣的術(shù)語(yǔ)描述DOM来庭。但我覺(jué)得稱(chēng)為“節(jié)點(diǎn)樹(shù)”更準(zhǔn)確

4、節(jié)點(diǎn)

節(jié)點(diǎn)(node)屬于網(wǎng)絡(luò)術(shù)語(yǔ)穿挨,它表示網(wǎng)絡(luò)中的一個(gè)連接點(diǎn)月弛。一個(gè)網(wǎng)絡(luò)就是由一些節(jié)點(diǎn)構(gòu)成的集合。DOM也是同樣的情況科盛,文檔是由節(jié)點(diǎn)構(gòu)成的集合帽衙。

  • 元素節(jié)點(diǎn)
  • 文本節(jié)點(diǎn)
  • 屬性節(jié)點(diǎn)

4、1元素節(jié)點(diǎn)

DOM的原子是元素節(jié)點(diǎn)(element node)諸如<body>贞绵、<p>厉萝、<ui>之類(lèi)的元素。標(biāo)簽的名字就是元素的名字榨崩。元素也可以包含其他的元素谴垫。沒(méi)有被包含在其他元素的唯一元素是<html>元素,它是我們的節(jié)點(diǎn)樹(shù)的根元素母蛛。

4翩剪、2文本節(jié)點(diǎn)

在上述例子中,<p>元素包含著文本“don't forget to buy this stuff.”它就是一個(gè)文本節(jié)點(diǎn)(text node)溯祸。

4肢专、3屬性節(jié)點(diǎn)

屬性節(jié)點(diǎn)是對(duì)元素做出更具體的描述。例如焦辅,幾乎所有的元素都有一個(gè)title屬性,我們可以利用這個(gè)屬性對(duì)包含在元素里的東西做出準(zhǔn)確的描述:

<p title="a gentle reminder">Don't forget to buy this stuff.<p>

在DOM中title="a gentle reminder"是一個(gè)屬性節(jié)點(diǎn)(attribute node)椿胯,在前面的例子中無(wú)序清單元素<ul>有個(gè)id屬性筷登。有些清單元素<li>有class屬性。

三者之間的關(guān)系.png

4哩盲、4 CSS

類(lèi)似javascript腳本前方,我們也可以將CSS樣式嵌在文檔<head>部分(style>標(biāo)簽之間)狈醉。也可以放在另外的一個(gè)文件里。**在HTML文件中引用CSS文件的格式:

<link type="text/css" href="file.css" rel="stylesheet">```
**繼承(inheritance)**是CSS技術(shù)中的一項(xiàng)強(qiáng)大功能惠险。
1)苗傅、 class屬性
```html
<p class="special">This pargraph has the special class<p>
<h2 class="special">So dose this headline</h2>```
在樣式表里可以為上面的代碼進(jìn)行定義
```css
special{
font-style: italic;
}```
還可以這樣定義
```css
h2.special{
text-transform: uppercase;
}```
2)、id屬性
id屬性的用途是給網(wǎng)頁(yè)里的某個(gè)元素加上一個(gè)獨(dú)一無(wú)二的標(biāo)識(shí)符:
```html
<ul id="purchases">```
樣式表定義
```css
#purchases{
border:1px solid white;
background-color:#333;
color:#ccc;
padding:1em;
}```
```css
#purchases li{
font-weight:bold;
}```
####4班巩、5獲取元素
> 有3種DOM方法可獲取元素節(jié)點(diǎn)渣慕,分別是通過(guò)元素ID、通過(guò)標(biāo)簽名和通過(guò)類(lèi)名字來(lái)獲取

- **getElementById**
- **getElementsByTagName**
- **getElementsByClassName**

###1)getElementById
此方法將返回一個(gè)與那個(gè)有著給定id屬性值的元素節(jié)點(diǎn)對(duì)應(yīng)的對(duì)象抱慌,**在javascript里注意大小寫(xiě)**逊桦。它是document對(duì)象特有的函數(shù),在腳本代碼里抑进,函數(shù)名的后面必須跟有**一對(duì)圓括號(hào)**强经,這對(duì)圓括號(hào)包含這**函數(shù)的參數(shù)。**`document.getElementById(id)`在getElementById方法中只有一個(gè)參數(shù):**你想獲得的那個(gè)元素的id屬性的值寺渗,**這個(gè)id屬性必須放在單引號(hào)或雙引號(hào)里匿情。`docment.getElementById("purchases")`這個(gè)調(diào)用將返回一個(gè)對(duì)象,這個(gè)對(duì)象對(duì)應(yīng)著document對(duì)象里的一個(gè)獨(dú)一無(wú)二的元素信殊,那個(gè)元素的HTLM id屬性值是`purchases`
```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>Shoping List<title>
  </head>
  <body>
     <h1>What to buy</h1>
     <p title="a gentle reminder">Don’t forget to buy this stuff.<p>
     <ul id="purchases">
        <li> A tin of beans<li>
        <li class="sale">Cheese<li>
        <li class="sale important">Milk<li>
        </ul>
     <script>
         alert(typeof docment.getElementById("purchases"));
     </script>
    <body>
  </html>
//利用`typeof`操作符進(jìn)行驗(yàn)證(typeof操作符可以告訴我們它的操作數(shù)是一個(gè)字母炬称、數(shù)值、函數(shù)鸡号、布爾值還是對(duì)象转砖。

驗(yàn)證可得是一個(gè)對(duì)象

2)getElementsByTagName

getElementsByTagName方法返回一個(gè)對(duì)象數(shù)組,每個(gè)對(duì)象分別對(duì)應(yīng)著文檔里有著給定標(biāo)簽的一個(gè)元素鲸伴。它的參數(shù)是標(biāo)簽的名字:decument.getElementByTagName(tag)

alert(document.getElementsByTagName("li").length);//顯示文檔里的列表元素個(gè)數(shù)為:3
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>Shoping List<title>
  </head>
  <body>
     <h1>What to buy</h1>
     <p title="a gentle reminder">Don’t forget to buy this stuff.<p>
     <ul id="purchases">
        <li> A tin of beans<li>
        <li class="sale">Cheese<li>
        <li class="sale important">Milk<li>
        </ul>
     <script>
         var items=document.getElementByTagName("li");
         for (var i=0; i<items.length;i++){
         alert(typeof items[i]);
         }
     </script>
    <body>
  </html>
//代碼運(yùn)行結(jié)果顯示三個(gè)alert對(duì)話框府蔗,顯示的消息都是“object”。

getElementsByTagName允許把一個(gè)通配符作為它的參數(shù)汞窗,通配符(*)必須放在引號(hào)里

alert(document.getElementsByTagName("*").length);//可以知道文檔里有多少個(gè)元素節(jié)點(diǎn)
var shopping=document.getElementById("purchases");
var items=shopping.getElementsByTagName("*");
//程序運(yùn)行結(jié)果姓赤,items數(shù)組將只包含id屬性值是purshase的元素清單的元素

3)getElementByClassName

這個(gè)方法讓我們能夠通過(guò)class屬性中的類(lèi)名來(lái)訪問(wèn)元素,getElementByClassName也只接受一個(gè)參數(shù)仲吏,就是類(lèi)名:

getElementByClassName(class)```
這個(gè)方法的返回值也與getElementsByTagName類(lèi)似不铆,都是一個(gè)具有相同類(lèi)名的元素的數(shù)組。
```javascript
document.getElementsByClassName("sale")```
利用這種方法還可有查找那些帶有多個(gè)類(lèi)名的元素裹唆。多個(gè)類(lèi)名之間用空格分開(kāi)即可
```javascript
alert(document.getElementsByClassName("important sale").length);
//對(duì)話框顯示1誓斥,表示只有一個(gè)元素匹配。類(lèi)名的順序不重要许帐,就算元素還帶有更多類(lèi)名也沒(méi)有關(guān)系劳坑。

也可以和getElementById組合使用

     var shopping=document.getElementById("purchase");
     var sales=shopping.getElementsByClassName("sale");
sales數(shù)組中包含的就只是位于“purchases”列表中的帶有“sale”類(lèi)的元素。

getElementByClassName方法非常有用成畦,但只有較新的瀏覽器才支持它距芬。所以涝开,需要使用已有的DOM方法來(lái)實(shí)現(xiàn)自己的getElementsByClassName。

function getElementsByClassName(node,classname){
if (node.getElementsByClassName){
//使用現(xiàn)有的方法
return node.getElementsByTagName("*");
for (var i=0; i<elems.length;i++){
  if(elems[i].ClassName.indexof(classname)!= -1){
results[results.length]=elems[i];
          }
      }
return results框仔;
    }
}```
####5 獲取和設(shè)置屬性
- **getAttribute方法**(獲取元素的屬性)
- **setAttribute方法**(更改屬性節(jié)點(diǎn)值)

#####5舀武、1getAttribute
getAttribute是一個(gè)函數(shù),它只有一個(gè)參數(shù)(你所要查詢(xún)的屬性的名稱(chēng))
```html
object.getAttribute(attribute)```
getAttribute只能通過(guò)元素節(jié)點(diǎn)對(duì)象調(diào)用离斩。
例如银舱,可以與getElementByTagName方法合用獲取每個(gè)`<p>`元素的title屬性
```html
var paras = document.getElementByTagName("p");
for (var i=0; i<paras.length; i++){
  alert(paras[i].getAttribute("title"));
}
代碼運(yùn)行后顯示著文本“a gentle reminder”的alterdui
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市捐腿,隨后出現(xiàn)的幾起案子纵朋,更是在濱河造成了極大的恐慌,老刑警劉巖茄袖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件操软,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡宪祥,警方通過(guò)查閱死者的電腦和手機(jī)聂薪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蝗羊,“玉大人藏澳,你說(shuō)我怎么就攤上這事∫遥” “怎么了翔悠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)野芒。 經(jīng)常有香客問(wèn)我蓄愁,道長(zhǎng),這世上最難降的妖魔是什么狞悲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任撮抓,我火速辦了婚禮,結(jié)果婚禮上摇锋,老公的妹妹穿的比我還像新娘丹拯。我一直安慰自己,他們只是感情好荸恕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布乖酬。 她就那樣靜靜地躺著,像睡著了一般融求。 火紅的嫁衣襯著肌膚如雪剑刑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天双肤,我揣著相機(jī)與錄音施掏,去河邊找鬼。 笑死茅糜,一個(gè)胖子當(dāng)著我的面吹牛七芭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔑赘,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼狸驳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了缩赛?” 一聲冷哼從身側(cè)響起耙箍,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酥馍,沒(méi)想到半個(gè)月后辩昆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旨袒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年汁针,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砚尽。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡施无,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出必孤,到底是詐尸還是另有隱情猾骡,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布敷搪,位于F島的核電站兴想,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏购啄。R本人自食惡果不足惜襟企,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狮含。 院中可真熱鬧顽悼,春花似錦、人聲如沸几迄。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)映胁。三九已至木羹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坑填。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工抛人, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脐瑰。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓妖枚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親苍在。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绝页,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 之前通過(guò)深入學(xué)習(xí)DOM的相關(guān)知識(shí),看了慕課網(wǎng)DOM探索之基礎(chǔ)詳解篇這個(gè)視頻(在最近看第三遍的時(shí)候寂恬,準(zhǔn)備記錄一點(diǎn)東西...
    微醺歲月閱讀 4,487評(píng)論 2 62
  • 前言 歸根結(jié)底续誉,代碼都是思想和概念的體現(xiàn)。沒(méi)人能把一種程序設(shè)計(jì)語(yǔ)言的所有語(yǔ)法和關(guān)鍵字都記住初肉,可以查閱參考書(shū)來(lái)解決酷鸦。...
    朱細(xì)細(xì)閱讀 2,940評(píng)論 4 14
  • 一、樣式篇 第1章 初識(shí)jQuery (1)環(huán)境搭建 進(jìn)入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,392評(píng)論 0 44
  • 這幾天朴译,都沒(méi)有更新文章井佑,因?yàn)槲业貌×耍眢w的不適可以靠藥物來(lái)治理眠寿,那心里的病怎么治躬翁? 心里的病就像是一種慢性病毒,...
    haihailo閱讀 573評(píng)論 0 0
  • 2017年11月23日 星期四 晴 昨天晚上身體有點(diǎn)不舒服沒(méi)寫(xiě)日記盯拱。今天和孩子一塊去取訂的奶盒发,拿好奶要走...
    圈圈370閱讀 141評(píng)論 0 0