DOM編程從入門到忘記

来源:http://www.cnblogs.com/lidyan/archive/2017/05/22/6889648.html
-Advertisement-
Play Games

文檔對象模型(Document Object Model,DOM)是使用 W3C 定義的 API (Application Program Interface) 來操作 HTML 文檔 (此處不局限於 HTML,亦可操作 XHTML、XML 等),使用戶可以與進行頁面交互。 它使用對象的表示方式來表 ...


文檔對象模型(Document Object Model,DOM)是使用 W3C 定義的 API (Application Program Interface) 來操作 HTML 文檔 (此處不局限於 HTML,亦可操作 XHTML、XML 等),使用戶可以與進行頁面交互。

它使用對象的表示方式來表示對應的文檔結構及其中的內容。

通過使用 DOM 提供的 API (Application Program Interface) 可以動態的修改節點(node),也就是對 DOM 樹的直接操作。 瀏覽器中通過使用 JavaScript 來實現對於 DOM 樹的改動。

動態的修改節點可以分為兩步,1. 找到一個節點或者說標簽 2. 操作這個標簽。

一、查找元素

1、直接查找

document.getElementById             根據ID獲取一個標簽
document.getElementsByName          根據name屬性獲取標簽集合
document.getElementsByClassName     根據class屬性獲取標簽集合
document.getElementsByTagName       根據標簽名獲取標簽集合

2、間接查找

// 包含標簽中間的文本
parentNode          // 父節點
childNodes          // 所有子節點
firstChild          // 第一個子節點
lastChild           // 最後一個子節點
nextSibling         // 下一個兄弟節點
previousSibling     // 上一個兄弟節點
 
//不包含標簽中間的文本
parentElement           // 父節點標簽元素
children                // 所有子標簽
firstElementChild       // 第一個子標簽元素
lastElementChild        // 最後一個子標簽元素
nextElementtSibling     // 下一個兄弟標簽元素
previousElementSibling  // 上一個兄弟標簽元素

二、操作

1、內容

innerText   純文本
outerText
innerHTML   HTML內容,可以包含標簽
outerHTML  
value       表單標簽選中的值

2、屬性

attributes                // 獲取所有標簽屬性
setAttribute(key,value)   // 設置標簽屬性
getAttribute(key)         // 獲取指定標簽屬性
 
/*
var atr = document.createAttribute("class");
atr.nodeValue="democlass";
document.getElementById('n1').setAttributeNode(atr);
*/

3、class操作

className                // 獲取所有類名
classList                // 獲取所有類名,以列表形式
classList.remove(cls)    // 刪除指定類
classList.add("cls")       // 添加類

document.getElementById('gettxt').classList
>> ["c1","hide"]

4、標簽操作

a.創建標簽

// 方式一
var tag = document.createElement('a')
tag.innerText = "dyan"
tag.className = "c1"
tag.href = "http://www.cnblogs.com/***"
 
// 方式二
var tag = "<a class='c1' href='http://www.cnblogs.com/***'>dyan</a>"

b.操作標簽

// 方式一
var obj = "<input type='text' />";
xxx.insertAdjacentHTML("beforeEnd",obj);
xxx.insertAdjacentElement('afterBegin',document.createElement('p'))
 
//註意:第一個參數只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd'
 
// 方式二
var tag = document.createElement('a')
xxx.appendChild(tag)
xxx.insertBefore(tag,xxx[1])

5、樣式操作

var obj = document.getElementById('i1')
 
obj.style.fontSize = "32px";
obj.style.backgroundColor = "red";
<input onfocus="Focus(this);" onblur="Blur(this);" id="search" value="請輸入關鍵字" style="color: gray;" />

<script>
   function Focus(ths){
       ths.style.color = "black";
       if(ths.value == '請輸入關鍵字' || ths.value.trim() == ""){

           ths.value = "";
       }
   }

   function Blur(ths){
       if(ths.value.trim() == ""){
           ths.value = '請輸入關鍵字';
           ths.style.color = 'gray';
       }else{
           ths.style.color = "black";
       }
   }
</script>

6、位置操作

總文檔高度
document.documentElement.offsetHeight
  
當前文檔占屏幕高度
document.documentElement.clientHeight
  
自身高度
tag.offsetHeight
  
距離上級定位高度
tag.offsetTop
  
父定位標簽
tag.offsetParent
  
滾動高度
tag.scrollTop
 
/*
    clientHeight -> 可見區域:height + padding
    clientTop    -> border高度
    offsetHeight -> 可見區域:height + padding + border
    offsetTop    -> 上級定位標簽的高度
    scrollHeight -> 全文高:height + padding
    scrollTop    -> 滾動高度
    特別的:
        document.documentElement代指文檔根節點
*/

7、提交表單

document.geElementById('form').submit()

8、其他操作

console.log                 輸出框
alert                       彈出框
confirm                     確認框
  
// URL和刷新
location.href               獲取URL
location.href = "url"       重定向
location.reload()           重新載入
  
// 定時器
setInterval                 多次定時器
clearInterval               清除多次定時器
setTimeout                  單次定時器
clearTimeout                清除單次定時器

三、事件

對於事件需要註意的要點:
a 綁定

方式一
<button onclick="displayDate()">試一試</button>

方式二
<script>
document.getElementById("myBtn").onclick=function(){displayDate()};
</script>

b 事件觸發

this標簽當前正在操作的標簽,event封裝了當前事件的內容

  • this 觸發當前事件的標簽
  • event 觸發當前標簽的事件內容 keycoode
  • 事件鏈以及跳出
  • 自定義事件>預設事件
<a href ="http://baidu.com" onclick="return Func();">sou baidu</a>
// 自定義事件優先順序大於預設事件
// 阻止預設事件 加上 return 
<script>
function Func(){
    alert(轉去百度);
    return false;  //true執行預設事件,false不執行預設事件
}
</script>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ECMAScript 的語法大量借鑒了C及其他類C語言(如Java 和Perl)的語法。 1. 區分大小寫 2.標識符 2.1 第一個字元必須是一個字母、下劃線(_)或一個美元符號($); 2.2 其他字元可以是字母、下劃線、美元符號或數字 按照慣例,ECMAScript標識符採用駝峰大小寫格式,也 ...
  • 一、相對定位(position:relative) 如果想讓一個元素在本來的位置進行一個位移,可以將該元素的定位設置為relative,同時指定相對位移(利用top,bottom,left,right).需要註意的是,元素仍然在文檔流中,占據著它本來的位置空間. 二、絕對定位(position:ab ...
  • 工作中接到新項目,開發前都需要先規劃項目目錄,然後一個個創建文件,搭建sass編譯環境,下載jquery,Swiper等類庫... 這些準備工作都要花上不少時間。每做一個項目,都會遇到同樣的問題,再重覆一遍嗎? 是時候做點改變了:編寫自己的cli工具,一行命令,3秒鐘進入coding狀態! 本文以自 ...
  • JavaWeb一--瀏覽器技術 一、HTTP協議 1.1 HTTP定義 HTTP(Hypertext Transport Protocol),超文本傳輸協議。 一種詳細規定了瀏覽器和web伺服器之間互相通信的規則,通過網際網路傳送萬維網文檔的數據傳送協議。 1.2 協議原理 1.3 請求格式 * 第一 ...
  • 項目的需要,要整一個視頻直播,但又不想在其他平臺那種直播室盜鏈展示,那我就直接用播放器來實現rtmp流媒體伺服器推流吧!沒廢話,走起 1.你要有一個媒體伺服器,暫時用【盤古雲】,這個還好,算是不錯的平臺了。註冊就能用,貌似免費的一樣,哈哈不管那麼多先搭建一個,看圖: 圖解:【1】菜單,進入創建一個媒 ...
  • 昨天,我接到的公司老司機的命令,要求我完成一個萬年曆,目的是想通過日曆來利用ajax顯示報名信息。平時不怎麼重視日曆的我遇到了很多麻煩,幸好在公司的一臺機器上找到了問題解決的思路。雖然不知道這位sir是誰,但是我還是要感謝他,他的思路讓我明白了什麼是閏年,什麼是小月大月,跳轉月份的規則...總之,如 ...
  • 左圖為本博客右側截取的GIF圖,右圖為代碼效果 HTML: css: JS: 此效果主要通過間隔取兩數之間的隨機數來改變標簽的樣式。 ...
  • 通常我們設置元素的寬和高樣式經常會出現一些問題,比如以下css的設置: 比如以下的代碼: 實際上我們期望的結果可能是這樣: 但是實際上是這樣的: 因為我們實際的寬度和高度是這樣計算出來的: width(寬) + padding(內邊距) + border(邊框) = 元素實際寬度 height(高) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...