三十:javaScript之DOM對象

1.DOM對象簡介

DOM,全稱“Document Object Model(文檔對象模型)”乙埃,它是由W3C組織定義的一個標準站玄。
在前端開發(fā)時,我們往往需要在頁面某個地方添加一個元素或者刪除元素快骗,這種添加元素、刪除元素的操作就是通過DOM來實現(xiàn)的。

2.DOM結(jié)構
DOM采用樹形結(jié)構作為分層結(jié)構方篮,以樹節(jié)點形式表示頁面中各種元素或內(nèi)容思灌。
舉例:

<html>
<head>
    <title><title>
<body>
    <h1>我要自學網(wǎng)</h1>
    <p>我要自學網(wǎng)成立于……</p>
</body>
</html.>

上面這個HTML文檔使用DOM樹形結(jié)構解析為:


22.png

在DOM中,每一個元素看成一個節(jié)點恭取,而每一個節(jié)點就是一個“對象”。也就是我們在操作元素時熄守,把每一個元素節(jié)點看成一個對象蜈垮,然后使用這個對象的屬性和方法進行相關操作。

下面我們介紹幾個關于節(jié)點的概念裕照。
1攒发、根節(jié)點
在HTML文檔中,html就是根節(jié)點晋南。

2惠猿、父節(jié)點
一個節(jié)點之上的節(jié)點就是該節(jié)點的父節(jié)點,例如h1的父節(jié)點就是body负间,body的父節(jié)點就是html偶妖。

3、子節(jié)點
一個節(jié)點之下的節(jié)點就是該節(jié)點的子節(jié)點政溃,例如h1就是body的子節(jié)點趾访。

4、兄弟節(jié)點
如果多個節(jié)點在同一層次董虱,并擁有相同的父節(jié)點扼鞋,那么這幾個節(jié)點就是兄弟節(jié)點。
例如h1和p就是兄弟節(jié)點愤诱,因為他們擁有相同的父節(jié)點body

DOM對象節(jié)點屬性;

parentNode 獲取當前節(jié)點的父節(jié)點
childNodes 獲取當前節(jié)點的子節(jié)點集合
firstChild 獲取當前節(jié)點的第一個子節(jié)點
lastChild 獲取當前節(jié)點的最后一個子節(jié)點
previousSibling 獲取當前節(jié)點的前一個兄弟節(jié)點
nextSibling 獲取當前節(jié)點的后一個兄弟節(jié)點
attributes 元素的屬性列表

其實除了上表列舉的屬性之外云头,還有nodeName、nodeValue和nodeType等幾個比較重要的屬性淫半。

DOM節(jié)點操作簡介:
在DOM學習中溃槐,對于節(jié)點的操作是核心內(nèi)容,也是整個JavaScript入門教程中最核心技術之一撮慨。大家一定要花心思去認真掌握竿痰。在一般的前端工作面試中,這些操作是最基本的

關于DOM節(jié)點常用操作如下:
(1)創(chuàng)建節(jié)點砌溺;
(2)插入節(jié)點影涉;
(3)刪除節(jié)點;
(4)復制節(jié)點规伐;
(5)替換節(jié)點蟹倾;

獲取DOM中指定元素:
在[CSS入門教程]的學習中,我們知道:如果想要對某個元素進行樣式操作,就必須先通過一種方式來選中該元素(也就是[CSS選擇器]鲜棠,然后才能進行相關樣式的操作肌厨。在JavaScript中,如果想要對節(jié)點進行創(chuàng)建豁陆、刪除等操作柑爸,同樣也要通過一種方式來選中該節(jié)點。只有你獲取了該元素節(jié)點盒音,才能進行各種操作表鳍,很容易理解吧。
在JavaScript中祥诽,可以通過以下2種方式來選中指定元素:
(1)getElementById()譬圣;
(2)getElementsByName()
一、getElementById()
在JavaScript中雄坪,如果想通過id來選中元素厘熟,我們可以使用document對象的getElementById()方法。
getElementById()方法類似于CSS中的id選擇器维哈。
語法:
document.getElementById("元素id");
舉例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <div id="lvye">綠葉學習網(wǎng)JavaScript入門教程</div>
    <script type="text/javascript">
        var e = document.getElementById("lvye");
        e.style.color = "red";
    </script>
</body>
</html>

在瀏覽器預覽效果如下:


13-4-1.png

分析:
這里使用document.getElementById()的方法獲取id為lvye的div元素绳姨,然后把這個DOM對象賦值給變量e,然后使用DOM對象的style對象來設置div元素顏色為紅色笨农。我們在“JavaScript操作CSS樣式”這一節(jié)會詳細給大家介紹這種方法就缆。

二、getElementsByName()
在JavaScript中谒亦,如果想通過name來選中元素竭宰,我們可以使用document對象的getElementsByName()方法。
語法:
document.getElementsByName("表單元素name值");

說明:
getElementsByName()方法都是用于獲取表單元素份招。
與getElementById()方法不同的是切揭,使用該方法的返回值是一個數(shù)組,而不是一個元素锁摔。因此廓旬,我們想要獲取具體的某一個表單元素,就必須通過數(shù)組下標來獲取谐腰。
舉例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <input name="web" id="radio1" type="radio" value="HTML"/>
    <input name="web" id="radio2" type="radio" value="CSS"/>
    <input name="web" id="radio3" type="radio" value="JavaScript"/>
    <input name="web" id="radio4" type="radio" value="jQuery"/>
    <script type="text/javascript">
        alert(document.getElementsByName("web")[0].value);
    </script>
</body>
</html>

在瀏覽器預覽效果如下:


13-4-2.png

其實可以這樣說孕豹, getElementById()和getElementsByName()這兩種方法是“JavaScript選擇器”。

創(chuàng)建節(jié)點:
在JavaScript中十气,創(chuàng)建新節(jié)點都是先用document對象中的createElement()和createTextNode()這2種方法創(chuàng)建一個元素節(jié)點励背,然后再通過appendChild()、insertBefore()等方法把新元素節(jié)點插入現(xiàn)有的元素節(jié)點中去砸西。

語法:
var e = document.createElement("元素名"); //創(chuàng)建元素節(jié)點
var t = document.createTextNode("元素內(nèi)容"); //創(chuàng)建文本節(jié)點
e.appendChild(t); //把元素內(nèi)容插入元素中去

舉例1:創(chuàng)建簡單節(jié)點

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript">
        var e = document.createElement("h1");
        var txt = document.createTextNode("綠葉學習網(wǎng)");
        e.appendChild(txt);    //把元素內(nèi)容插入元素中去
        document.body.appendChild(e);
    </script>
</body>
</html>

在瀏覽器預覽效果如下:

13-5-1.png

舉例2:創(chuàng)建復雜節(jié)點

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript">
        var e = document.createElement("input");
        e.id = "submit";
        e.type = "button";
        e.value = "提交";
        document.body.appendChild(e);
    </script>
</body>
</html>

在瀏覽器預覽效果如下:


13-5-2.png

插入節(jié)點:

在JavaScript中叶眉,插入節(jié)點有2種方法:
(1)appendChild();
(2)insertBefore();

1址儒、appendChild()
在JavaScript中,我們可以使用appenChild()方法把新的節(jié)點插入到當前節(jié)點的“內(nèi)部”衅疙。
語法:
obj.appendChild(new)

說明:
obj表示當前節(jié)點莲趣,new表示新節(jié)點。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        function insert() {
            var e = document.createElement("li");
            var str = document.getElementById("txt").value; //獲取文本框的值
            var txt = document.createTextNode(str);
            e.appendChild(txt);
            var list = document.getElementById("list");
            list.appendChild(e);
        }
    </script>
</head>
<body>
    <ul id="list">
        <li>HTML</li>
        <li>CSS</li>
        <li>JavaScript</li>
    </ul>     
    列項文本:<input id="txt" type="text"/><br />
    <input type="button" value="插入新項" onclick="insert()" />
</body>
</html>

在瀏覽器預覽效果如下:


13-6-1.png

分析:
我們在文本框中輸入列表項文本“jQuery”饱溢,然后點擊“插入新項”按鈕喧伞,瀏覽器預覽效果如下:


13-6-2.png

2.nsertBefore()
在JavaScript中,我們可以使用insertBefore()方法將新的子節(jié)點添加到當前節(jié)點的“末尾”绩郎。
語法:
obj.insertBefore(new,ref)
說明:
obj表示父節(jié)點絮识;
new表示新的子節(jié)點;
ref指定一個節(jié)點嗽上,在這個節(jié)點前插入新的節(jié)點。
舉例:

<!DOCTYPE html>
<html >
<head>
    <title></title>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript">
        function insert() {
            var e = document.createElement("li");
            var str = document.getElementById("txt").value; //獲取文本框的值
            var txt = document.createTextNode(str);
            e.appendChild(txt);
            var list = document.getElementById("list");
            list.insertBefore(e,list.firstChild);
        }
    </script>
</head>
<body>
    <ul id="list">
        <li>HTML</li>
        <li>CSS</li>
        <li>JavaScript</li>
        <li>jQuery</li>
    </ul>     
    列項文本:<input id="txt" type="text"/><br />
    <input type="button" value="插入新項" onclick="insert()"/>
</body>
</html>

在瀏覽器預覽效果如下:


13-6-3.png

分析:
我們在文本框中輸入列表項文本“jQuery”熄攘,然后點擊“插入新項”按鈕兽愤,瀏覽器預覽效果如下:


13-6-2.png

刪除節(jié)點

語法:
obj.removeChild(oldChild);
舉例1:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        //定義刪除函數(shù)
        function del() {
            var e = document.getElementById("list");
            //判斷元素節(jié)點e是否有子節(jié)點
            if (e.hasChildNodes) {
                e.removeChild(e.lastChild);    //刪除e元素的最后一個子節(jié)點
            }
        }
    </script>
</head>
<body>
    <ul id="list">
        <li>HTML</li>
        <li>CSS</li>
        <li>JavaScript</li>
        <li>jQuery</li>
        <li>ASP.NET</li>
    </ul>
    <input type="button" value="刪除" onclick="del()"/></div>
</body>
</html>

在瀏覽器預覽效果如下:


13-7-1.png

復制節(jié)點
語法:
obj.cloneNode(bool)
說明:
參數(shù)obj表示被復制的節(jié)點,而參數(shù)bool是一個布爾值挪圾,取值如下:
(1)1或true:表示復制節(jié)點本身以及復制該節(jié)點下的所有子節(jié)點浅萧;
(2)0或false:表示僅僅復制節(jié)點本身,不復制該節(jié)點下的子節(jié)點哲思;
舉例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        function add() {
            var e = document.getElementById("list");
            document.body.appendChild(e.cloneNode(1));
        }
    </script>
</head>
<body>
    <ul id="list">
        <li>HTML</li>
        <li>CSS</li>
        <li>JavaScript</li>
        <li>jQuery</li>
        <li>ASP.NET</li>
    </ul>
    <input type="button" value="添加" onclick="add()" />
</body>
</html>

在瀏覽器預覽效果如下:


13-8-1.png

替換節(jié)點
語法:
obj.replaceChild(new,old)

說明:
obj洼畅,表示被替換節(jié)點的父節(jié)點;
new棚赔,表示替換后的新節(jié)點帝簇;
old,需要被替換的舊節(jié)點靠益。
舉例:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script type="text/javascript">
        function replace() {
            //獲取兩個文本框的值
            var tag = document.getElementById("tag").value;
            var txt = document.getElementById("txt").value;
            //獲取p元素
            var lvye = document.getElementById("lvye");
            //根據(jù)兩個文本框的值創(chuàng)建新節(jié)點
            var e = document.createElement(tag);
            var t = document.createTextNode(txt);
            e.appendChild(t);
            document.body.replaceChild(e,lvye);
        }
    </script>
</head>
<body>
    <p id="lvye">綠葉學習網(wǎng)</p>
    <hr />
    輸入標簽:<input id="tag" type="text"/><br />
    輸入文本:<input id="txt" type="text"/><br />
    <input type="button" value="替換" onclick="replace()" />
</body>
</html>

在瀏覽器預覽效果如下:

13-9-1.png
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丧肴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胧后,更是在濱河造成了極大的恐慌芋浮,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壳快,死亡現(xiàn)場離奇詭異纸巷,居然都是意外死亡,警方通過查閱死者的電腦和手機眶痰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門瘤旨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凛驮,你說我怎么就攤上這事裆站。” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵宏胯,是天一觀的道長羽嫡。 經(jīng)常有香客問我,道長肩袍,這世上最難降的妖魔是什么杭棵? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮氛赐,結(jié)果婚禮上魂爪,老公的妹妹穿的比我還像新娘。我一直安慰自己艰管,他們只是感情好滓侍,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牲芋,像睡著了一般撩笆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缸浦,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天夕冲,我揣著相機與錄音,去河邊找鬼裂逐。 笑死歹鱼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的卜高。 我是一名探鬼主播弥姻,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掺涛!你這毒婦竟也來了蚁阳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸽照,失蹤者是張志新(化名)和其女友劉穎螺捐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矮燎,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡定血,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诞外。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜沟。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖峡谊,靈堂內(nèi)的尸體忽然破棺而出茫虽,到底是詐尸還是另有隱情刊苍,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布濒析,位于F島的核電站正什,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏号杏。R本人自食惡果不足惜婴氮,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盾致。 院中可真熱鬧主经,春花似錦、人聲如沸庭惜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽护赊。三九已至鉴腻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間百揭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工蜓席, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留器一,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓厨内,卻偏偏與公主長得像祈秕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子雏胃,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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

  • 歡迎關注個人微信公眾賬號:byodian個人博客:Byodian's Blog JavaScript 基礎知識總結(jié)...
    工具速遞閱讀 762評論 0 3
  • ??DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API(應用程序編程接口)瞭亮。 ??DOM 描繪...
    霜天曉閱讀 3,655評論 0 7
  • 一方仿、JS前言 (1)認識JS 也許你已經(jīng)了解HTML標記(也稱為結(jié)構),知道了CSS樣式(也稱為表示)统翩,會使用HT...
    凜0_0閱讀 2,777評論 0 8
  • DOM(文檔對象模型)是針對 HTML 和 XML 文檔的一個 API仙蚜。DOM 描繪了一個層次化的節(jié)點樹,允許開發(fā)...
    劼哥stone閱讀 775評論 8 6
  • 第1章 認識JS JavaScript能做什么厂汗?1.增強頁面動態(tài)效果(如:下拉菜單委粉、圖片輪播、信息滾動等)2.實現(xiàn)...
    mo默22閱讀 1,304評論 0 5