### JS中常用的DOM操作
> DOM:document object model 文檔對象模型(提供一系列的屬性和方法,供我們獲取和操作DOM元素)
#### 1.獲取DOM的方式
- document.getElementById([元素的ID]):在整個文檔中,根據元素的ID,獲得這個元素對象
+ document是獲取元素的上下文(獲取元素的范圍),getElementById方法的上下文只能是document
+ 獲取到的結果是一個對象(堆內存:里面存儲著很多內置的屬性和方法)
- [context].getElementsByTagName([標簽名]):在指定的上下文中,基于元素的標簽名獲取一組元素集合
+ 獲取的結果是HTMLCollection元素集合
- [context].getElementsByClassName([樣式類名]):在指定上下文中,基于樣式類名獲取對應的元素集合
+ 不兼容IE6~8低版本瀏覽器
- document.getElementsByName([NAME屬性值]):根據元素的NAME屬性值,在整個文檔中獲取一組元素集合
+ 在IE瀏覽器中(9及以下)只對表單元素作用
- document.documentElement:獲取整個HTML元素對象(HTML是頁面的根節點)
- document.body:獲取整個BODY元素對象
- document.head:獲取整個HEAD元素對象
不兼容IE6~8低版本瀏覽器,可以根據選擇器(類似于CSS選擇器)快速獲取元素和元素集合的辦法:
- [context].querySelector([SELECTOR]) 獲取一個元素對象
- [context].querySelectorAll([SELECTOR]) 獲取一組元素集合
在不考慮兼容的情況下,這兩個方法就足以獲取我們需要的元素對象和元素集合了
#### 2.獲取DOM節點的屬性和方法
> 我們認為在頁面中所有呈現的內容,都是DOM文檔中的一個節點(node),例如:元素標簽是元素節點、注釋的內容是注釋節點、文本內容是文本節點、document是文檔節點...
#### 3.關于DOM元素中的增加/刪除/修改
- document.createElement([標簽名]):動態創建一個DOM元素
- [CONTAINER].appendChild([元素]):把元素動態插入到指定容器的末尾
- [CONTAINER].insertBefore([新元素],[原始頁面中的元素]):把新創建的元素放置到指定容器原始頁面元素的前面 [原始頁面中的元素]肯定在[CONTAINER]容器中
- [CONTAINER].removeChild([元素]):在指定容器中移除元素
- document.createTextNode():創建一個文本節點
- ...
- 設置元素的屬性/自定義屬性
+ 元素.xxx=xxx
+ 元素.setAttribute(xxx,xxx) setAttribute/getAttribute/removeAttribute
#### 4.修改DOM元素的樣式
- 元素.style.xxx :修改(獲取)當前元素的行內樣式
+ 操作的都是行內樣式,哪怕把樣式寫在樣式表中,只要沒有寫在行內上,也獲取不到
- 元素.className:操作的是當前元素的樣式類,基于樣式類的管理給予其不同的樣式
#### 5.給DOM元素設置內容
- innerHTML / innerText:給非表單元素設置或者操作其內容
- value:操作表單元素的內容
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
<title>珠峰培訓 - 微信:18310612838</title>
<!-- IMPORT CSS -->
<style>
.active {
color: red;
background-color: lightblue;
}
</style>
</head>
<body>
<div class="box">
<h2 class="title">新聞標題</h2>
<ul class="item" id="itemBox">
<li class="noLine">我是第1條新聞</li>
<li>我是第2條新聞</li>
<li class="noLine">我是第3條新聞</li>
<li>我是第4條新聞</li>
<li>我是第5條新聞</li>
</ul>
</div>
<div class="noLine" name="AAA">我是外面的DIV</div>
<input type="text" name="AAA">
<!-- IMPORT JS -->
<script>
// 或者.ITEM這個UL
// document.getElementById('itemBox');
// document.getElementsByTagName('ul')[0];
// document.getElementsByClassName('item')[0];
// querySelector不管匹配的結果有多少個,都只獲得第一個(元素對象)
// #itemBox .item ul ...
// let itemBox = document.querySelector('ul');
// console.log(itemBox);
// querySelectorAll獲取的都是集合(哪怕只有一項也是集合)
// let navList = document.querySelectorAll('#itemBox li');
// console.log(navList);
</script>
<script>
/*
// 獲取整個頁面中所有具備 noLine 樣式類的元素
// let noLines = document.getElementsByClassName('noLine');
// console.log(noLines); //=>[li,li,div]
// 獲取到的結果是元素集合,不管集合中有幾項,它都是集合
let item = document.getElementsByClassName('item');
item = item[0]; //=>獲取集合中的第一項(這才是我們要操作的ITEM元素對象)
let noLines = item.getElementsByClassName('noLine');
console.log(noLines); //=>[li,li]
*/
/*
var AAAS = document.getElementsByName('AAA');
console.log(AAAS); //=>[div,input] IE9 [input] 真實項目中也是基于它操作表單元素的,尤其是單選框或者復選框
*/
</script>
<script>
/* let itemBox = document.getElementById('itemBox'),
navList = itemBox.getElementsByTagName('li'); */
// console.dir(itemBox); //=>它是一個對象:itemBox.xxx=xxx
// console.dir(navList); //=>它是一個元素集合HTMLCollection(類數組集合:數字作為索引,LENGTH代表長度),集合中的每一項是單獨的元素對象 navList[0].xxx=xxx
//===========設置樣式
/* itemBox.style.color = 'red';
itemBox.style.backgroundColor =
'green'; //=><ul class="item" id="itemBox" style="color: red; background-color: green;"> 設置的結果都是行內樣式
itemBox.style.cssText = `color: red; background-color: green;`; 這種方式是STYLE一個個設置樣式的簡寫,批量給行內上設置很多樣式 */
/* itemBox.className = 'active'; //=>CLASSNAME這樣操作會把之前的樣式類名給覆蓋掉
itemBox.className += ' active'; //=>這樣也可以,記得加空格區分每個樣式類
itemBox.classList.add('active'); //=>向指定樣式集合中新增一個樣式類(兼容性差) */
</script>
</body>
</html>
~~~
- 0001.開課說明
- 0002.ECMAScript的發展歷程
- 0003.WEB2.0時代-服務器端渲染,前后端不分離
- 0004.WEB2.0時代-前后端分離模式
- 0005.大前端時代概述
- 0006.前端需要的技術棧和學習技巧
- 0007.瀏覽器
- 0008.JS的三部分組成
- 0009.JS中創建變量的6種形式
- 0010.JS中變量的命名規范
- 0011.JS中的數據類型分類
- 0012.JS中常用的幾種輸出方式
- 0013.number屬性類型詳細解讀1
- 0014.number數據類型詳細解讀2
- 0015.string數據類型詳細解讀1
- 0016.string數據類型詳細解讀2
- 0017.boolean數據類型詳細解讀
- 0018.object數據類型詳細解讀1
- 0019.object數據類型詳細解讀2
- 0020.談談學習
- 0021.數據類型檢測
- 0022.瀏覽器底層渲染機制(堆棧內存和數據類型區別)
- 0023.關于數據類型區別的面試題
- 0024.課后作業講解:數據類型轉換
- 0025.課后作業講解:堆棧內存處理
- 0026.課后作業講解:阿里的一道經典面試題
- 0027.JS中三種常用的判斷語句
- 0028.小實戰:開關燈特效
- 0029.FOR循環和FOR IN循環
- 0030.課后作業講解:關于循環判斷和數據轉化
- 0031.課后作業講解:關于DOM對象的深入理解
- 0032.關于元素集合的相關操作(奇偶行變色)
- 0033.課后作業講解:邏輯思維判斷題
- reset.min.css
- 0034.(復習)前四天內容的綜合復習梳理
- 0035.初窺函數:函數的作用、語法、形參
- 0036-0038.選項卡案例
- 0039.隔行變色案例:進一步強化自定義屬性編程思想
- 0040.其它作業題的講解(自定義屬性強化)
- 0041.函數創建和執行的堆棧運行機制
- 0042.函數中的形參和實參
- 0043.函數中的實參集合ARGUMENTS
- 0044.函數中的返回值RETURN
- 0045.箭頭函數和匿名函數
- 0046.兩個等于比較時候的數據類型轉換規則
- 0047.數組的基礎結構和常規操作
- 0048.數組常用方法:增刪改的五個方法
- 0049.數組常用方法:查詢、拼接、轉換為字符串
- 0050.數組常用方法:檢測是否包含、排序和迭代
- 0051.數組去重:雙FOR循環(數組塌陷和SPLICE刪除優化)
- 0052.數組去重:對象鍵值對方式(ES6中SET)
- 0053.Math數學函數對象中常用的方法
- 0054.String字符串中常用的方法
- 0055.實戰案例:時間字符串格式化
- 0056.實戰案例:queryURLParams1
- 0057.實戰案例:queryURLParams2
- 0058.實戰案例:獲取四位不重復的驗證碼
- 0059.階段作業題講解1(基礎知識)
- 0060.階段作業題講解2(實戰案例)
- 0061-0062.DOM操作中相關知識的復習
- 0063.DOM中的節點操作1
- 0064.DOM中的節點操作2
- utils
- 65.關于DOM的增刪改