【前端教程】JavaScript DOM 操作實戰案例詳解

案例1:操作div子節點并修改樣式與內容

功能說明

獲取div下的所有子節點,設置它們的背景顏色為紅色;如果是p標簽,將其內容設置為"我愛中國"。

實現代碼

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>a{text-decoration: none;}</style><script>window.onload=function(){// 用getElementsByTagName標簽選擇器獲取div下的所有的元素節點var ziJieDianDivShuZu = document.getElementsByTagName("div")[0].children;// 用for of遍歷元素節點,用.style.backgroundColor將每個節點的背景顏色修改為紅色for(var i of ziJieDianDivShuZu){i.style.backgroundColor="red";}// 標簽選擇器可以獲取div下的所有的標簽,所以用標簽選擇器去獲取div下的所有的p標簽var jieDianPShuZu=document.getElementsByTagName("div")[0].getElementsByTagName("p");// 遍歷得到的p數組,讓每個p內容修改為我愛中國for(var i of jieDianPShuZu){i.innerHTML="我愛中國";}}</script>
</head>
<body><div><img src="./img/1.jpg" width="100px" height="100px"><a href="#">a href詩書畫唱超鏈接</a><p>P點贊</p><ul><li>li投幣</li></ul><p>p大家好</p></div>
</body>
</html>

關鍵技術點解析

  1. 使用getElementsByTagName("div")[0]獲取頁面中第一個div元素
  2. 通過children屬性獲取div的所有子元素節點
  3. 使用for of循環遍歷子節點,通過style.backgroundColor設置背景顏色
  4. 針對p標簽,使用getElementsByTagName("p")單獨獲取,再通過innerHTML修改內容

案例2:UL列表隔行換色效果

功能說明

獲取ul下的所有子節點,實現鼠標移入時li元素的背景顏色隔行換色效果。

實現代碼

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>ul{list-style: none;width: 666px; height: 23px; margin: 0px auto;text-align: center;}ul li{float: left;width:100px ;background-color: yellow;}ul li a{text-decoration: none;}</style><script>window.onload=function(){// 用標簽選擇器把ul等標簽看作重上到下排序的數組,獲取ul的下標為0的第一個的內容var ulFirstNeiRong=document.getElementsByTagName("ul")[0];// 分別獲取奇數和偶數項的li元素var jiShuZu=ulFirstNeiRong.getElementsByClassName("jiID");var ouShuZu=ulFirstNeiRong.getElementsByClassName("ouID");// 為奇數項添加鼠標事件for(var i of jiShuZu){i.onmouseover=function(){this.style.backgroundColor="red";}i.onmouseout=function(){this.style.backgroundColor="yellow";}}// 為偶數項添加鼠標事件for(var i of ouShuZu){i.onmouseover=function(){this.style.backgroundColor="green";}i.onmouseout=function(){this.style.backgroundColor="yellow";}}}</script>
</head>
<body><ul><!--jiID:奇ID,ouID:偶ID--><li class="jiID"><a href="#">詩書畫唱</a></li><li class="ouID"><a href="#"> UP主</a></li><li class="jiID"><a href="#">三連</a></li><li class="ouID"><a href="#">關注</a></li></ul>
</body>
</html>

關鍵技術點解析

  1. 使用getElementsByClassName按類名獲取不同的li元素
  2. 為元素添加onmouseoveronmouseout事件實現鼠標懸停效果
  3. 通過this關鍵字引用當前觸發事件的元素
  4. 使用CSS float屬性實現水平菜單布局

案例3:節點類型統計

功能說明

制作一級菜單,當鼠標移動到ul上時,在div中顯示ul包含的子節點、元素節點、屬性節點和文本節點的數量。

方法一實現代碼

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>ul {list-style: none;width: 666px;height: 23px;margin: 0px auto;text-align: center;}ul li {float: left;width: 100px;background-color: yellow;}ul li a {text-decoration: none;}div {width: 200px;height: 200px;border: 1px solid red;margin: 0px auto;}</style><script>window.onload = function() {// 獲取第一個ul元素var ulFirstNeiRong = document.getElementsByTagName("ul")[0];// 獲取ul的下一個兄弟元素divvar divAllNeiRong = ulFirstNeiRong.nextElementSibling;// 為ul添加鼠標移入事件ulFirstNeiRong.onmouseover = function() {// 子節點總數var ziJieDanShuZuZongChangDu = ulFirstNeiRong.childNodes.length;// 元素節點總數var yuanSuJieDianShuZuZongChangDu = ulFirstNeiRong.children.length;// 屬性節點總數var shuXingJieDianShuZuZongChangDu = ulFirstNeiRong.attributes.length;// 統計文本節點數量var wenBenJieDianShuZuZongChangDu = 0;var allJieDianShuZu = ulFirstNeiRong.childNodes;for(var i of allJieDianShuZu) {// 節點類型為3表示是文本節點if(i.nodeType == 3) {wenBenJieDianShuZuZongChangDu++;}}// 在div中顯示統計結果divAllNeiRong.innerHTML = "子節點" + ziJieDanShuZuZongChangDu + "個<br>元素節點" + yuanSuJieDianShuZuZongChangDu +"個<br>屬性節點" + shuXingJieDianShuZuZongChangDu + "個<br>文本節點" + wenBenJieDianShuZuZongChangDu + "個";}}</script>
</head>
<body><ul><li><a href="#">詩書畫唱</a></li><li><a href="#">UP主</a></li><li><a href="#">三連</a></li><li><a href="#">關注</a></li></ul><div></div>
</body>
</html>

關鍵技術點解析

  1. childNodes屬性獲取所有類型的子節點(包括文本節點、元素節點等)
  2. children屬性只獲取元素類型的子節點
  3. attributes屬性獲取元素的所有屬性節點
  4. nodeType屬性判斷節點類型(3表示文本節點)
  5. nextElementSibling獲取下一個兄弟元素

案例4:圖片輪播效果

功能說明

實現圖片自動輪播效果,鼠標移入時停止輪播,鼠標移出時繼續輪播。

實現代碼

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script>// 頁面加載完成后執行window.onload=function(){// 圖片路徑數組window.imgShuZu = ["./img/1.jpg", "./img/2.jpg", "./img/3.jpg"];// 控制圖片的索引下標window.indexXiaBiao = 0;// 獲取img元素window.img = document.getElementsByTagName("img")[0];// 定時器變量window.start = null;// 鼠標移入時停止輪播window.img.onmouseover = function() {clearInterval(window.start);}// 鼠標移出時繼續輪播window.img.onmouseout = function() {// 每666毫秒執行一次gaiBianFunction函數window.start = setInterval(gaiBianFunction, 666);}}// 切換圖片的函數function gaiBianFunction() {// 控制索引下標,實現循環效果if (window.indexXiaBiao <= 2) {indexXiaBiao++;}if (window.indexXiaBiao > 2) {indexXiaBiao = 0;}// 切換圖片window.img.src = window.imgShuZu[window.indexXiaBiao];}</script>
</head>
<body><img src="./img/1.jpg" width="666px" height="666px" />
</body>
</html>

關鍵技術點解析

  1. 使用setInterval創建定時器實現自動輪播
  2. 使用clearInterval清除定時器實現停止輪播
  3. 通過控制數組索引實現圖片循環切換
  4. 全局變量存儲圖片路徑、當前索引和定時器ID
  5. 鼠標事件onmouseoveronmouseout控制輪播狀態

總結

以上四個案例涵蓋了DOM操作的核心知識點:

  • 元素獲取:getElementsByTagNamegetElementsByClassName
  • 節點操作:childNodeschildrenattributes等屬性
  • 樣式修改:通過style屬性修改元素樣式
  • 事件處理:鼠標事件、定時器事件等
  • 內容修改:innerHTML屬性修改元素內容

這些基礎操作是前端開發的重要基石,掌握它們可以實現各種交互效果和動態頁面功能。在實際開發中,可以根據需求靈活組合這些技術,創造出更豐富的用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95847.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95847.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qiankun+vite+react配置微前端

微前端框架&#xff1a;qiankun。 主應用&#xff1a;react19vite7&#xff0c;子應用1&#xff1a;react19vite7&#xff0c;子應用2 &#xff1a;react19vite7 一、主應用 1. 安裝依賴 pnpm i qiankun 2. 注冊子應用 (1) 在src目錄下創建個文件夾&#xff0c;用來存儲關于微…

git: 取消文件跟蹤

場景&#xff1a;第一次初始化倉庫的時候沒有忽略.env或者node_modules&#xff0c;導致后面將.env加入.gitignore也不生效。 取消文件跟蹤&#xff1a;如果是因為 node_modules 已被跟蹤導致忽略無效&#xff0c; 可以使用命令git rm -r --cached node_modules來刪除緩存&…

開講啦|MBSE公開課:第五集 MBSE中期設想(下)

第五集 在本集課程中&#xff0c;劉玉生教授以MBSE建模工具選型及二次定制開發為核心切入點&#xff0c;系統闡釋了"為何需要定制開發"與"如何實施定制開發"的實踐邏輯&#xff0c;并提煉出MBSE中期實施的四大核心要素&#xff1a;高效高質建摸、跨域協同…

CSDN個人博客文章全面優化過程

兩天前達到博客專家申請條件&#xff0c;興高采烈去申請博客專家&#xff1a; 結果今天一看&#xff0c;申請被打回了&#xff1a; 我根據“是Yu欸”大神的博客&#xff1a; 【2024-完整版】python爬蟲 批量查詢自己所有CSDN文章的質量分&#xff1a;附整個實現流程_抓取csdn的…

Websocket的Key多少個字節

在WebSocket協議中&#xff0c;握手過程中的Sec-WebSocket-Key是一個由客戶端生成的隨機字符串&#xff0c;用于安全地建立WebSocket連接。這個Sec-WebSocket-Key是基于Base64編碼的&#xff0c;并且通常由客戶端在WebSocket握手請求的頭部字段中發送。根據WebSocket協議規范&a…

SVT-AV1編碼器中實現WPP依賴管理核心調度

一 assign_enc_dec_segments 函數。這個函數是 SVT-AV1 編碼器中實現波前并行處理&#xff08;WPP&#xff09; 和分段依賴管理的核心調度器之一。//函數功能&#xff1a;分配編碼解碼段任務//返回值Bool//True 成功分配了一個段給當前線程&#xff0c;調用者應該處理這個段//F…

直接讓前端請求代理到自己的本地服務器,告別CV報文到自己的API工具,解放雙手

直接使用前端直接調用本地服務器&#xff0c;在自己的瀏覽器搜索插件proxyVerse&#xff0c;類似的插件應該還有一些&#xff0c;可以選擇自己喜歡的這類插件可以將瀏覽器請求&#xff0c;直接轉發到本地服務器&#xff0c;這樣在本地調試的時候&#xff0c;不需要前端項目&…

Golang Goroutine 與 Channel:構建高效并發程序的基石

在當今這個多核處理器日益普及的時代&#xff0c;利用并發來提升程序的性能和響應能力已經成為軟件開發的必然趨勢。而Go語言&#xff0c;作為一門為并發而生的語言&#xff0c;其設計哲學中將“并發”置于核心地位。其中&#xff0c;Goroutines 和 Channels 是Go實現并發編程的…

17 C 語言宏進階必看:從宏替換避坑到宏函數用法,不定參數模擬實現一次搞定

預處理詳解1. 預定義符號//C語?設置了?些預定義符號&#xff0c;可以直接使?&#xff0c;預定義符號也是在預處理期間處理的。 __FILE__ //進?編譯的源?件--預處理階段被替換成指向文件名字符串的指針--char* 類型的變量 __LINE__ //?件當前的?號 --預處理階段替換成使用…

深入剖析 HarmonyOS ArkUI 聲明式開發:狀態管理藝術與最佳實踐

好的&#xff0c;請看這篇關于 HarmonyOS ArkUI 聲明式開發范式與狀態管理的技術文章。 深入剖析 HarmonyOS ArkUI 聲明式開發&#xff1a;狀態管理藝術與最佳實踐 引言 隨著 HarmonyOS 4、5 的廣泛應用以及面向未來的 HarmonyOS NEXT&#xff08;API 12&#xff09;的發布&…

Qwen-Code安裝教程

一、概述Qwen Code 是一個強大的基于命令行、面向開發者的 AI 工作流工具&#xff0c;改編自 Gemini CLI&#xff0c;專門針對 Qwen3-Coder 模型進行了優化。它專門為代碼理解、代碼重構、自動化工作流、Git 操作等場景設計&#xff0c;讓你的開發工作變得更高效、更智能。它既…

老師傅一分鐘精準判斷電池好壞!就靠這個神器!

在汽車維修與保養領域&#xff0c;蓄電池狀態的準確判斷一直是技術人員面臨的重要挑戰。傳統的電壓測量方法只能反映表面現象&#xff0c;無法深入評估蓄電池的實際健康狀態。Midtronics MDX-P300蓄電池及電氣系統測試儀作為專業級診斷設備&#xff0c;通過電導測試技術和多系統…

Axure筆記

Axure介紹 快速原型的軟件 應用場景&#xff1a;拉投資、給項目團隊、銷售演示、項目投標、內部收集反饋、教學 軟件安裝與漢化 漢化&#xff1a;復制lang文件夾和三個dll 軟件的基礎功能 基本布局&#xff1a;菜單欄、工具欄、頁面和摘要、元件和母版、畫布、樣式交互和說明設…

Pytorch Yolov11 OBB 旋轉框檢測+window部署+推理封裝 留貼記錄

Pytorch Yolov11 OBB 旋轉框檢測window部署推理封裝 留貼記錄 上一章寫了下【Pytorch Yolov11目標檢測window部署推理封裝 留貼記錄】&#xff0c;這一章開一下YOLOV11 OBB旋轉框檢測相關的全流程&#xff0c;有些和上一章重復的地方我會簡寫&#xff0c;要兩篇結合著看&#x…

《Keil 開發避坑指南:STM32 頭文件加載異常與 RTE 配置問題全解決》

《Keil 開發避坑指南&#xff1a;STM32 頭文件加載異常與 RTE 配置問題全解決》文章提綱一、引言? 簡述 Keil 在 STM32 開發中的核心地位&#xff0c;指出頭文件加載和 RTE&#xff08;運行時環境&#xff09;配置是新手常遇且關鍵的問題&#xff0c;說明本文旨在為開發者提…

TortoiseGit 2.4.0.0 64位安裝教程(附詳細步驟和Git配置 附安裝包)

本教程詳細講解 ?TortoiseGit 2.4.0.0 64位版本? 的完整安裝步驟&#xff0c;包括如何運行 ?TortoiseGit-2.4.0.0-64bit.msi? 安裝包、設置安裝路徑、關聯 Git 環境&#xff0c;以及安裝后的基本配置方法&#xff0c;適合 Windows 用戶快速上手 Git 圖形化管理工具。 一、…

大數據畢業設計選題推薦-基于大數據的高級大豆農業數據分析與可視化系統-Hadoop-Spark-數據可視化-BigData

?作者主頁&#xff1a;IT畢設夢工廠? 個人簡介&#xff1a;曾從事計算機專業培訓教學&#xff0c;擅長Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦?…

學習機器學習能看哪些書籍

關注B站可以觀看更多實戰教學視頻&#xff1a;hallo128的個人空間 在機器學習與深度學習的知識海洋中&#xff0c;選擇合適的書籍往往是入門和進階的關鍵。以下四本經典著作各具特色&#xff0c;覆蓋了從基礎理論到實踐應用的多個維度&#xff0c;無論你是初學者還是有一定基礎…

Unity通過Object學習原型模式

原型模式簡述 依據現有的實例生成新的實例 Object的實例化方法 Object.Instantiate 克隆 original 對象并返回克隆對象 Unity中的實例&#xff1a;預制體或場景中的游戲對象 示例 方法1&#xff1a;手動創建對象并添加組件 方法2&#xff1a;使用實例化方法&#xff0c;實…

【踩坑記錄】Unity 項目中 PlasticSCM 掩蔽列表引發的 文件缺失問題排查與解決

問題描述&#xff1a; Plastic SCM 簽入時&#xff0c;彈窗提示“項xxx在該工作區中不存在” Unity 項目中 PlasticSCM 掩蔽列表引發的 文件缺失問題排查與解決 文章目錄Unity 項目中 PlasticSCM 掩蔽列表引發的 文件缺失問題排查與解決一、前言二、Unity 與 .meta 文件機制1. …