精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

DOM入門,理解文檔對象模型

開發 前端
DOM全稱是Document Object Model(文檔對象模型), 它是HTML和XML文檔的編程接口. 簡單來說, DOM就是把我們的網頁文檔轉換成了一個對象模型, 這樣我們就可以用JavaScript來操作網頁了。

一、什么是DOM?

DOM全稱是Document Object Model(文檔對象模型), 它是HTML和XML文檔的編程接口. 簡單來說, DOM就是把我們的網頁文檔轉換成了一個對象模型, 這樣我們就可以用JavaScript來操作網頁了. 

想象一下: 你寫了一個HTML文件, 瀏覽器加載這個文件后, 會把它解析成一個樹狀結構, 這個結構就是DOM. 通過DOM, 我們可以:

  1. 改變網頁的內容.
  2. 修改元素的樣式.
  3. 添加或刪除元素.
  4. 響應用戶的交互.

示例代碼: 

//舉個最簡單的例子
document.getElementById('myButton').addEventListener('click', function() {
    alert('按鈕被點擊了!');
});

二、DOM樹結構解析

DOM的核心概念是"樹結構", 讓我們用一個簡單的HTML例子來說明:

<!DOCTYPE html>
<html>
<head>
    <title>我的網頁</title>
</head>
<body>
    <h1>歡迎來到我的網站</h1>
    <div class="content">
        <p>這是一個段落</p>
        <p>這是另一個段落</p>
    </div>
</body>
</html>

這個HTML會被瀏覽器解析成如下的DOM樹:

文檔 (Document)
└── html (根元素)
    ├── head
    │   └── title
    │       └── "我的網頁" (文本節點)
    └── body
        ├── h1
        │   └── "歡迎來到我的網站" (文本節點)
        └── div (class="content")
            ├── p
            │   └── "這是一個段落" (文本節點)
            └── p
                └── "這是另一個段落" (文本節點)

這個樹狀結構有幾個關鍵點: 

  1. 文檔節點(Document): 這是整個DOM樹的根節點,代表整個文檔.
  2. 元素節點(Element): 如<html>, <head>, <body>, <div>等.
  3. 文本節點(Text): 如標簽內的文字內容.
  4. 屬性節點(Attribute): 如class="content".

三、節點類型詳解

1) 元素節點

這是最常見的節點類型, 對應HTML標簽. 比如<div>, <p>, <a>等. 

const divElement = document.createElement('div');
console.log(divElement.nodeType); // 1
console.log(divElement.nodeType === Node.ELEMENT_NODE); // true

2) 文本節點

包含元素的文本內容. 

const textNode = document.createTextNode('你好,世界!');
console.log(textNode.nodeType); // 3

3) 注釋節點

對應HTML中的注釋.

const comment = document.createComment('這是一個注釋');
console.log(comment.nodeType); // 8

4)文檔節點

代表整個文檔, 即document對象.

console.log(document.nodeType); // 9

5) 節點之間的關系

DOM節點之間有多種關系: 

  1. parentNode: 父節點.
  2. childNodes: 所有子節點的列表(包括文本節點等).
  3. children: 僅元素子節點.
  4. firstChild/lastChild: 第一個/最后一個子節點.
  5. nextSibling/previousSibling: 下一個/上一個兄弟節點.

我們來看個示例:

<div id="container">
    <p>段落1</p>
    <p>段落2</p>
</div>
const container = document.getElementById('container');
console.log(container.childNodes.length); //可能為5(包括文本節點和元素節點)
console.log(container.children.length); //2(只有p元素)

四、DOM操作基礎 

1) 查詢元素

// 通過ID獲取
const element = document.getElementById('myId');


// 通過類名獲取(返回HTMLCollection)
const elements = document.getElementsByClassName('myClass');


// 通過標簽名獲取(返回HTMLCollection)
const divs = document.getElementsByTagName('div');


// 通過CSS選擇器獲取(返回第一個匹配元素)
const item = document.querySelector('.menu-item');


// 通過CSS選擇器獲取所有匹配元素(返回NodeList)
const items = document.querySelectorAll('.menu-item');

2)創建與添加元素

// 創建新元素
const newDiv = document.createElement('div');
newDiv.textContent = '我是新創建的div';


// 添加到文檔中
document.body.appendChild(newDiv);


// 插入到特定位置
const container = document.getElementById('container');
const firstChild = container.firstChild;
container.insertBefore(newDiv, firstChild);

3) 修改元素

// 修改內容
element.textContent = '新文本內容';
element.innerHTML = '<strong>加粗文本</strong>';


// 修改樣式
element.style.color = 'red';
element.style.backgroundColor = '#f0f0f0';


// 修改類
element.classList.add('new-class');
element.classList.remove('old-class');
element.classList.toggle('active');

4)刪除元素

// 移除子元素
const parent = document.getElementById('parent');
const child = document.getElementById('child');
parent.removeChild(child);


// 現代寫法(不需要知道父元素)
child.remove();

五、DOM事件處理

基本事件處理: 

const button = document.getElementById('myButton');


// 傳統方式
button.onclick = function() {
    console.log('按鈕被點擊了!');
};


// 推薦方式(可以添加多個事件監聽器)
button.addEventListener('click', function(event) {
    console.log('按鈕被點擊了!', event);
});

事件冒泡和捕獲, DOM事件有三個階段:

  1. 捕獲階段(從window向下到目標元素).
  2. 目標階段(到達目標元素).
  3. 冒泡階段(從目標元素向上冒泡).
document.getElementById('outer').addEventListener('click', function() {
    console.log('外層div - 冒泡階段');
}, false); // false或不傳表示冒泡階段


document.getElementById('inner').addEventListener('click', function() {
    console.log('內層div - 捕獲階段');
}, true); // true表示捕獲階段

利用事件冒泡機制,可以在父元素上處理子元素的事件.

<ul id="myList">
    <li>項目1</li>
    <li>項目2</li>
    <li>項目3</li>
</ul>
document.getElementById('myList').addEventListener('click', function(event) {
    if (event.target.tagName === 'LI') {
        console.log('點擊了:', event.target.textContent);
    }
});

六、DOM標準與綜合示例

DOM級別:

  1. DOM Level 1 (1998): 定義了核心DOM和HTML DOM.
  2. DOM Level 2 (2000): 添加了事件模型、樣式訪問等.
  3. DOM Level 3 (2004): 擴展了DOM核心,添加了XPath等.
  4. DOM Level 4 (2015): 也稱為DOM Living Standard,現代瀏覽器主要實現.

兼容性問題, 雖然現代瀏覽器對DOM的支持已經很好,但仍有一些需要注意的差異:

  • IE的差異:IE8及以下不支持addEventListener, 需要使用attachEvent.IE對某些CSS屬性的訪問方式不同.
  • 方法可用性:remove()方法在舊瀏覽器中不可用.classList在IE9及以下不支持.
  • 事件對象:在IE中, 事件對象是全局的window.event.在其他瀏覽器中, 事件對象作為參數傳遞.

兼容性的操作示例:

//兼容性事件處理示例
function addEvent(element, eventName, handler) {
    if (element.addEventListener) {
        element.addEventListener(eventName, handler);
    } else if (element.attachEvent) {
        element.attachEvent('on' + eventName, handler);
    } else {
        element['on' + eventName] = handler;
    }
}


//兼容性事件對象獲取
element.onclick = function(event) {
    event = event || window.event;
    const target = event.target || event.srcElement;
    // 處理事件...
};

綜合示例, 構建一個簡單的待辦事項列表:

<!DOCTYPE html>
<html>
<head>
    <title>待辦事項</title>
    <style>
        .completed {
            text-decoration: line-through;
            color: #999;
        }
    </style>
</head>
<body>
    <h1>我的待辦事項</h1>
    <input type="text" id="newTodo" placeholder="輸入新任務">
    <button id="addBtn">添加</button>
    <ul id="todoList"></ul>


    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const newTodoInput = document.getElementById('newTodo');
            const addBtn = document.getElementById('addBtn');
            const todoList = document.getElementById('todoList');


            // 添加新任務
            function addTodo() {
                const text = newTodoInput.value.trim();
                if (text) {
                    const li = document.createElement('li');


                    const span = document.createElement('span');
                    span.textContent = text;


                    const deleteBtn = document.createElement('button');
                    deleteBtn.textContent = '刪除';


                    li.appendChild(span);
                    li.appendChild(deleteBtn);
                    todoList.appendChild(li);


                    newTodoInput.value = '';


                    // 添加點擊事件(完成任務)
                    span.addEventListener('click', function() {
                        span.classList.toggle('completed');
                    });


                    // 添加刪除按鈕事件
                    deleteBtn.addEventListener('click', function() {
                        li.remove();
                    });
                }
            }


            // 點擊按鈕添加
            addBtn.addEventListener('click', addTodo);


            // 按回車鍵添加
            newTodoInput.addEventListener('keypress', function(e) {
                if (e.key === 'Enter') {
                    addTodo();
                }
            });
        });
    </script>
</body>
</html>

這個例子展示了: 

  1. 動態創建DOM元素
  2. 事件監聽
  3. 類名切換
  4. 元素刪除
  5. 表單處理
責任編輯:武曉燕 來源: 全棧程序員老馬
相關推薦

2012-04-26 08:29:22

DOM

2010-09-28 10:03:15

DOM文檔對象模型

2010-09-28 13:24:34

DOM文檔對象模型

2010-09-28 09:43:37

DOM文檔對象模型

2010-09-28 11:03:19

XML DOM

2010-09-28 09:33:25

DOM模型

2010-09-28 10:40:32

HTML DOM

2010-09-28 10:09:35

DOM對象模型

2012-06-27 09:44:28

ibmdw

2021-09-09 10:26:26

Javascript 文檔對象前端

2009-06-18 09:56:44

ADO.NET對象模型

2010-09-28 14:08:28

DOM

2010-09-13 14:24:17

JavaScript

2009-09-10 17:44:36

DOM模型INQ模型

2025-07-10 01:45:00

2010-09-09 13:55:47

XML DOM

2009-02-10 09:23:03

DOM模型MSXML

2019-03-18 09:00:00

軟件測試軟件開發

2010-09-09 13:40:19

XML DOM

2025-03-03 10:00:00

點贊
收藏

51CTO技術棧公眾號

无码成人精品区在线观看| 国产一区欧美| 国产欧美日韩视频在线观看| 日本亚洲欧洲色| 在线观看国产精品一区| 日韩欧美专区| 亚洲一级二级在线| 日韩欧美第二区在线观看| 国产女人18毛片水真多| 亚洲三级国产| 色噜噜狠狠色综合网图区| 国产伦理在线观看| 精品亚洲美女网站| 亚洲主播在线观看| 日韩欧美一区二区三区四区 | 久热re这里精品视频在线6| 日韩精品一二三| 中文字幕精品国产| 日本久久久久久久久久| 很污很黄的网站| 超碰国产精品一区二页| 偷拍一区二区三区四区| 在线视频欧美一区| 天堂在线视频免费观看| 久久电影网站中文字幕| 欧美午夜激情小视频| 欧美精品www| 久久久久久久久福利| av一级亚洲| 欧美日韩精品电影| 精品久久中文| 舔着乳尖日韩一区| 一区二区不卡在线观看| 天堂在线一二区| 久久99九九99精品| 国产成+人+综合+亚洲欧洲 | 日韩欧美三级在线观看| 色欲一区二区三区精品a片| 91精品福利观看| 在线影视一区二区三区| 自拍日韩亚洲一区在线| 91蜜桃在线视频| 久久久久久一二三区| 国产在线一区二| 精品国产999久久久免费| 久久国产精品99久久人人澡| 国产97免费视| 中文字幕免费在线观看视频| 欧美影院一区| 久久国产精品久久久久久久久久| 国产一区二区三区视频播放| 欧美一级精品片在线看| 亚洲欧美制服中文字幕| 亚洲色图14p| 午夜先锋成人动漫在线| 日韩电影免费在线观看中文字幕| 成年女人免费视频| 国偷自产av一区二区三区| 欧美成人精品福利| 中文字幕无码毛片免费看| 国产精品日本一区二区三区在线| 制服丝袜成人动漫| 天天久久综合网| 免费看一区二区三区| 日韩三级视频在线看| 国产伦理在线观看| 久久激情av| 日韩久久精品成人| 中文字幕在线观看免费高清| 天天操天天摸天天干| 久久精品播放| 久久精品视频中文字幕| 婷婷伊人五月天| 91成人精品一区二区| gogo久久| 欧美日韩国产专区| 999精品网站| 不卡一区二区在线观看| 精品一区二区三区中文字幕视频| 91精品国产高清一区二区三区 | 综合久久2023| 91精品91久久久中77777| 免费看污污网站| 精品视频在线观看免费观看| 精品久久久久久最新网址| 99久久人妻精品免费二区| 精品国产乱码久久久久久蜜坠欲下 | 麻豆国产在线播放| 中文字幕乱码久久午夜不卡 | 一区二区国产精品| 国产精品黄页免费高清在线观看| 国产又粗又猛又黄又爽| 国产麻豆精品一区二区| 精品亚洲欧美日韩| 午夜小视频在线| 亚洲444eee在线观看| 久久精品网站视频| 精品国产亚洲一区二区在线观看 | 一本久久综合| 国产精品一区二区久久精品| 亚洲爱情岛论坛永久| 国产亚洲短视频| 国产欧美精品一区二区色综合朱莉| 日本在线观看一区| 性爱视频在线播放| 欧美日韩国产色视频| 91av视频免费观看| 琪琪久久久久日韩精品| 久久精品国产2020观看福利| 亚欧视频在线观看| 极品尤物av久久免费看| 免费一区二区三区在在线视频| 久草免费在线| 日本高清不卡一区| 天堂www中文在线资源| 日韩一区电影| 91精品国产免费久久久久久| 国产精品久久无码一三区| 91丨国产丨九色丨pron| japanese在线播放| 国内精品伊人| 亚洲欧美三级伦理| 日韩激情一区二区三区| 国内精品第一页| 日韩hmxxxx| 日本三级一区| 精品国产髙清在线看国产毛片| 精品一区二区6| 久久国产精品99国产| 国产精品视频500部| av激情在线| 欧美久久久久免费| 日本一道本视频| 国产黄a三级三级三级av在线看| 综合一区在线| 国产成人一区二区| 日韩欧美电影在线观看| 亚洲成av人片www| 精品伦一区二区三区| 中文不卡在线| 亚洲va欧美va国产综合剧情| 尤物网在线观看| 欧美三级中文字幕在线观看| 久久精品成人av| 久久aⅴ乱码一区二区三区| 国产精品免费一区二区三区在线观看| 国产视频中文字幕在线观看| 欧美精品免费视频| 九九这里只有精品视频| 国产精品x8x8一区二区| 亚洲一区二区三区小说| 中文字幕国产高清| 日韩一区二区三区免费播放| 亚洲伊人色欲综合网| 超碰超碰在线观看| 日韩欧美高清| 国产精品夜间视频香蕉| av影片免费在线观看| 欧美色大人视频| 国产小视频你懂的| 精品一区二区三区香蕉蜜桃| 一区二区冒白浆视频| 自拍偷拍亚洲| 忘忧草精品久久久久久久高清| 911精品国产一区二区在线| 波多野吉衣中文字幕| 亚洲欧美bt| 免费一区二区三区| 欧美电影免费看| 国产亚洲精品美女久久久| 欧美日韩 一区二区三区| 国产欧美日韩另类视频免费观看| 男女无套免费视频网站动漫| 精品国产乱码久久久| 国产日韩欧美视频在线| 最爽无遮挡行房视频在线| 日韩欧美国产小视频| 久久久久久久极品内射| 99国产精品国产精品久久| 熟妇人妻va精品中文字幕| 欧洲福利电影| 91系列在线观看| 北岛玲一区二区三区四区| 欧美一级中文字幕| 久久久伦理片| 国产suv精品一区二区三区88区| 97电影在线观看| 日韩欧美国产综合一区| 精品久久久久久久久久中文字幕| 亚洲精品中文字幕乱码三区91| 国产欧美在线观看一区| 亚洲成人福利在线| 狠狠综合久久av一区二区老牛| 久久综合给合久久狠狠色| 粉嫩91精品久久久久久久99蜜桃 | 天天躁日日躁狠狠躁av麻豆男男 | 亚洲精品欧美在线| 国产成人无码一区二区在线观看| 日韩精品一级中文字幕精品视频免费观看 | 国产精品视频一区国模私拍| 午夜激情在线| 亚洲午夜色婷婷在线| 国产福利资源在线| 日本道在线观看一区二区| 金瓶狂野欧美性猛交xxxx| 日韩成人一级大片| 亚洲精品9999| 一级黄色av片| 中文字幕一区二区三区四区不卡| 国产成人精品综合久久久久99| 国产精品普通话对白| 日韩av有码在线| 免费男同深夜夜行网站| 久久亚洲国产| 久久99热只有频精品91密拍| 成人永久在线| 国产精品18久久久久久首页狼| 五月婷婷视频在线观看| 中文字幕视频一区二区在线有码| 狠狠人妻久久久久久综合麻豆| 欧美日免费三级在线| 毛片在线免费视频| 一区二区三区在线影院| 青青青视频在线播放| 久久综合999| 日本久久久久久久久久| 韩国成人福利片在线播放| 日韩有码免费视频| 在线观看一区视频| 亚洲第一精品区| 精品国产aⅴ| 欧美国产一二三区| 福利在线一区| 不卡一区二区三区视频| 在线观看欧美| 91精品久久久久久久久久久| 台湾成人免费视频| 日产精品久久久一区二区福利 | 在线日韩中文字幕| 日本一区高清| 日韩精品视频免费| 天天干免费视频| 亚洲第一男人天堂| 成 人 免费 黄 色| 日韩一级视频免费观看在线| 国产精品女人久久久| 欧美女孩性生活视频| 中文字幕日本人妻久久久免费| 91官网在线观看| 亚洲精品久久久久久久蜜桃| 日本精品视频一区二区| 亚洲精品成人在线视频| 色综合天天在线| 无码视频一区二区三区| 91久久香蕉国产日韩欧美9色| 丁香社区五月天| 欧洲视频一区二区| 中文字幕在线视频第一页| 欧美性猛交一区二区三区精品| 日韩中文字幕高清| 6699嫩草久久久精品影院| 精品国偷自产在线| 中文字幕一区二区三区精彩视频| 欧美自拍第一页| 男男gay无套免费视频欧美| 久久久久久久久久国产精品| 日本色护士高潮视频在线观看 | 国产精品一区二区三区不卡| 国产精品网址| 欧美国产综合视频| 欧美综合一区| 日韩人妻精品一区二区三区| 午夜视频一区| 人妻熟妇乱又伦精品视频| 久久亚洲精选| 国产精品自拍视频在线| 国产一区二区电影| 日本三级日本三级日本三级极| 97精品久久久久中文字幕 | wwww.国产| 国产精品 日产精品 欧美精品| www.com日本| 国产丝袜欧美中文另类| 999精品在线视频| 亚洲一区二区三区四区中文字幕| 五月婷婷色丁香| 欧美日韩视频不卡| 亚洲爱情岛论坛永久| 国产丝袜精品视频| 精品麻豆一区二区三区 | 亚洲精品在线观看av| 色天天综合久久久久综合片| 国产色视频在线| 日韩精品欧美激情| 高清全集视频免费在线| 91精品91久久久久久| 欧美视频免费看| 久久99热只有频精品91密拍| 91成人影院| 日本一本二本在线观看| 国产91国语对白在线| 高潮白浆女日韩av免费看| 一区二区视频网| 亚洲第一精品夜夜躁人人爽| 97最新国自产拍视频在线完整在线看| 久久久亚洲福利精品午夜| 日本精品网站| 国产尤物99| 一本一道久久综合狠狠老| 国产女女做受ⅹxx高潮| 高清在线成人网| 亚洲精品电影院| 一本久久a久久免费精品不卡| 国产免费黄色大片| 国产午夜精品视频免费不卡69堂| 美足av综合网| 成人xvideos免费视频| 久久不卡国产精品一区二区 | 国产精品 日韩| 欧美成人激情| 久久精品99国产| 成人av网站在线观看免费| 中文字幕国产日韩| 成人免费图片免费观看| 国产日韩欧美成人| 国产一区二区三区四区五区传媒| 欧美日韩视频免费| 国产在线国偷精品产拍免费yy| 国产毛片久久久久久久| 偷拍与自拍一区| 日本韩国在线观看| 欧美猛少妇色xxxxx| 亚洲精品第一| 色999日韩自偷自拍美女| 午夜综合激情| 日韩 中文字幕| 欧美日韩国产中文精品字幕自在自线| 韩国av在线免费观看| 欧美精品日韩三级| 国产精久久一区二区| 国产高清精品软男同| 精品一二三四区| 三级影片在线观看| 欧美日韩日日摸| 午夜不卡视频| 国产成人精品在线播放| 精品在线99| 99久久国产宗和精品1上映| 久久久久9999亚洲精品| 天天干,天天干| 亚洲日本成人女熟在线观看 | 国产精品欧美激情| 欧美视频免费| 一道本在线免费视频| 国产精品视频一二| 一级全黄裸体免费视频| www亚洲精品| 白嫩亚洲一区二区三区| 日韩精品一区二区三区四| 成人午夜视频在线观看| 激情五月色婷婷| 亚洲欧美一区二区三区久久| 澳门av一区二区三区| 亚洲国产精品123| 久久成人久久爱| 麻豆视频在线免费看| 欧美成人a∨高清免费观看| 丁香花在线电影| 蜜桃999成人看片在线观看| 日韩av一区二区三区| 99成人在线观看| 三级黄色片播放| 成人国产电影网| 日韩欧美成人一区二区三区| 亚洲欧美日韩成人| 成人做爰免费视频免费看| 国产又大又长又粗又黄| 国产a精品视频| 少妇太紧太爽又黄又硬又爽| 在线观看欧美成人| 国产精品一区免费在线| 3d动漫一区二区三区| 中文字幕乱码亚洲精品一区| 亚洲av综合色区无码一二三区| 欧美在线www| 国产精品久久久久久久| 一边摸一边做爽的视频17国产 | 最好看的日本字幕mv视频大全| 色婷婷**av毛片一区| 国产精品白浆| 性欧美极品xxxx欧美一区二区| 一区二区三区在线免费观看| 亚洲色图21p| 亚洲aa中文字幕| 性久久久久久| 草视频在线观看| 国产一区二区三区欧美| 51亚洲精品| 手机看片一级片| 婷婷久久综合九色综合伊人色|