国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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. 表單處理
責任編輯:武曉燕 來源: 全棧程序員老馬
相關推薦

2010-09-28 13:24:34

DOM文檔對象模型

2010-09-28 09:43:37

DOM文檔對象模型

2012-04-26 08:29:22

DOM

2010-09-28 10:03:15

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

2009-02-10 09:23:03

DOM模型MSXML

2010-09-09 13:55:47

XML DOM

2019-03-18 09:00:00

軟件測試軟件開發

2013-01-14 09:44:58

JavaScriptJSJS框架

2010-09-09 13:40:19

XML DOM
點贊
收藏

51CTO技術棧公眾號

国产欧美日韩一区二区三区四区| 久久综合色鬼综合色| 日韩在线不卡视频| 老司机午夜在线| 亚洲黄网站在线观看| 东京热加勒比无码少妇| 日韩福利电影在线观看| 99国产在线观看| 欧美日韩一二| 国产精品普通话| 九九精品久久| 欧美激情一二区| 在这里有精品| 久久久免费电影| 99国产精品免费网站| 深夜福利日韩在线看| 在线观看福利电影| 亚洲精品综合精品自拍| h片在线观看视频免费| 精品久久久久一区| 中文在线а√天堂| xxxxx91麻豆| 国产精品丝袜在线播放| 欧美专区中文字幕| 日韩电影免费在线观看| 91在线观看免费网站| 欧美一区成人| 国产在线播放一区二区| 一区二区久久| 色综合久久av| 国产一区二区三区免费看 | 2021中文字幕在线| 亚洲美女性视频| 欧美激情啪啪| 日本91av在线播放| 亚洲影视一区二区三区| 久久久久久久有限公司| 久久av资源站| 无码人妻精品一区二区三区66| 国产精品国产精品国产专区不片| 最新天堂资源在线| 欧美日韩国产高清一区| 亚洲最新无码中文字幕久久| 久久久国产成人精品| 日韩最新在线| 精品日韩欧美| 成人av午夜电影| 992tv在线影院| 69堂精品视频| 国产精品白丝久久av网站| 欧美在线观看一区二区三区| 欧美极品一区二区三区| 欧美 另类 交| 亚洲免费观看视频| 少女频道在线观看免费播放电视剧| 一区二区欧美亚洲| 亚洲专区视频| 奇米精品在线| 欧美国产精品专区| 超碰免费97在线观看| 国产亚洲精品va在线观看| 色婷婷综合久久久久久| 国产一区二区自拍| 91偷拍与自偷拍精品| 在线视频福利| 欧美zozo另类异族| 性欧美lx╳lx╳| 亚洲不卡中文字幕| 亚洲欧美另类小说视频| 日韩中文字幕国产精品| 澳门成人av| 精品久久一区二区三区蜜桃| 99精品国产热久久91蜜凸| 一级理论片在线观看| 亚洲欧美一区二区三区四区| 欧美日韩第一| 免费看黄在线看| 欧美日韩黄色影视| 麻豆成人入口| 青青草免费在线视频观看| 亚洲综合视频在线观看| 国产资源在线观看入口av| 国产精品久久久久久婷婷天堂| 免费看日韩精品| 一级片在线播放| 久久婷婷国产麻豆91天堂 | 成人午夜碰碰视频| 国产三级在线| 国语自产精品视频在免费| 麻豆91在线看| 黄色一级视频网站| 中文字幕日本欧美| 国产精品一页| 欧美激情图区| 欧美国产日韩一区二区在线观看| 丝袜美腿亚洲综合| 欧美一区二区少妇| 热久久这里只有精品| 91性感美女视频| 碰碰在线视频| 久久久婷婷一区二区三区不卡| 中文字幕在线观看一区| 成人国产精品| 男同互操gay射视频在线看| 欧美日韩在线观看一区二区| 精品99在线| 蜜桃特黄a∨片免费观看| 日韩在线观看免费高清| 久久黄色级2电影| 2021国产在线| 国产女主播一区二区三区| 精品福利在线看| 第九色区aⅴ天堂久久香| 天天综合天天操| 欧美理论电影在线播放| 激情av综合网| а√天堂中文资源在线bt| 精品欧美国产| 一区免费观看视频| 动漫3d精品一区二区三区乱码| 欧美丰满熟妇bbbbbb百度| 亚洲欧美日韩国产成人| 加勒比av一区二区| 男人av在线播放| 综合操久久久| 亚洲美女av在线播放| 国产综合色产在线精品| 理论片午夜视频在线观看| 伊人狠狠色丁香综合尤物| 欧美精品一区二区三区高清aⅴ| 激情久久中文字幕| 国产乱视频在线观看| 韩国一区二区三区美女美女秀| 色婷婷av久久久久久久| 欧美日韩亚洲国产精品| 91在线观看| 四虎影视永久免费在线观看一区二区三区 | 26uuu亚洲综合色| 欧美在线se| 成人羞羞国产免费网站| 欧美成人一区在线| 国产精品电影院| 免费国产自久久久久三四区久久| 国产www在线观看| 国产精品情侣自拍| 欧美综合久久久| 秋霞av亚洲一区二区三| 欧美日韩免费观看中文| 日韩女优av电影在线观看| 成人av手机在线观看| 欧美一级视频| 久久99蜜桃| 91资源在线观看| 日本大胆人体视频| 欧美精品成人一区二区在线观看| 一区二区在线观看不卡| 草莓福利社区在线| 久久综合伊人77777麻豆| 欧美大片免费久久精品三p| 理论电影国产精品| 欧美成人xxxx| 黄色三及免费看| 国产欧美日韩视频一区二区三区| 成人a在线观看| 国产婷婷色综合av蜜臀av| 亚洲综合在线视频| 亚洲特色特黄| 日本免费一区二区三区等视频| 国产在线高潮| 亚洲国产精品yw在线观看 | 午夜激情av在线| 欧美亚洲国产成人| 91精品视频网| 日韩成人激情视频| 日韩成人在线视频网站| 久久影视电视剧免费网站清宫辞电视 | 欧美日韩一区二区视频在线观看| 久久久国产91| 亚洲美女精品成人在线视频| 欧美一区二区人人喊爽| 日韩福利视频在线观看| 欧美性生交片4| 在线一区二区三区四区五区| 91精品国产综合久久久久| av在线免费观看网址| 亚洲福利二区| h片在线免费观看| 国产午夜一区| 国产一区二区在线看| 国产成人小视频| 久久69国产一区二区蜜臀| 麻豆国产精品视频| 丝袜亚洲另类欧美| 国产欧美日韩亚洲一区二区三区| 国内精品视频666| 亚洲国产精品激情在线观看| 色综合久久久久综合99| 欧美日韩一卡二卡| 久久夜色精品亚洲噜噜国产mv| 国产91免费看片|