[toc]
### 1. 如何獲取節點
`getElementById()`
`getElementByClassName()`
`getElementByTagName()`:獲取的是類數組對象
`querySelectorAll()`:選擇器獲取
```
獲取文檔中第一個 <p> 元素:
document.querySelector("p");
```
```
獲取文檔中 class="example" 的第一個元素:
document.querySelector(".example");
```
```
querySelectorAll`選擇匹配到的所有元素
var lis = document.querySelectorAll(".one")
```
### 2. 獲取子節點
children-->只獲取元素的子節點
childNodes-->所有類型的子節點 ie9以下 將childNodes識別為元素節點
```
var childEle = document.getElementById("parent").children;
var childs = document.getElementById("parent").childNodes;
```
> #### 2.1 demo:ul內點擊子li標簽變色
```
<ul id="parent">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
var childs = document.getElementById("parent").childNodes;
for(var i=0; i<childs.length; i++){
if(childs[i].nodeType==1){
childs[i].style.color = "red";
}
}
```
#### 2.2 獲取第一個(最后一個)子節點
`firstChild `-- 獲取第一個子節點
`firstElementChild` -- 獲取第一個子元素
`lastChild` -- 獲取最后一個子節點
`lastElementChild` -- 獲取最后一個元素子節點
```
var parent = document.getElementById("parent");
var first = parent.firstElementChild;
if(first){
first.style.color = "red";
}else {
parent.firstChild.style.color = "green"; //在ie9以下
}
```
### 3. 獲取父節點
`child.parentNode`
`child.parentElement`:父元素節點
### 4. 獲取兄弟節點
`nextSibling`
`nextElementSibling`:下一個兄弟元素節點
`prevSibling`
`prevElementSibling`:上一個兄弟元素節點
### 5. 如何添加一個節點
1. 創造一個元素節點:`document.createElement()`
1. 在節點之后添加
`test.append(p, h1)`:在父元素最后一位添加, 可添加多個
`test.after(p)`
`test.appendChild(p)`
2. 在節點之前添加
`test.prepend(p)` 在父元素第一位添加子元素
`test.before(p)`
`test.insertBefore(newElement, targetElement)`
>#### 1 添加img節點
```
var parent = document.getElementById("parent");
var img = document.createElement("img");
img.src = "images/現代.png";
img.id = "img";
img.className = "img"; //class屬性特殊,通過className設置
parent.appendChild(img);
console.log(img);
```
>#### 2 添加文本節點
```
<div id="parent">
<p id="one">hello world</p>
</div>
```
```
var parent = document.getElementById("parent"); //找到父元素
var one = document.getElementById("one"); //找到one
var p = document.createElement("p"); //創建p標簽
var txt = document.createTextNode("first"); //創建內容
p.appendChild(txt); //將內容添加到p
parent.insertBefore(p, one); //將p添加到one之前
```
### 6. 更改節點
#### 1. 移除節點
`node.removeChild()`:移除節點
```
var parent = document.getElementById("parent");
var one = document.getElementById("one");
parent.removeChild(one);
```
#### 2. 替換節點
`node.replaceChild (newnode,oldnew ) `
```
var parent = document.getElementById("parent");
var one = document.getElementById("one");
var h1 = document.createElement("h1");
h1.innerHTML = "h1";
parent.replaceChild(h1, one);
```
#### 3. 克隆節點
`node.cloneNode(true)`
`var cTest = test.cloneNode(true)`
### 7. 節點的分類(nodeType)
元素節點: 1
屬性節點: 2
文本節點: 3
document: 9
```
<p id="test">hello world</p>
var test = document.getElementById("test").firstChild;
console.log(test.nodeType); //3 因為firstChild為"hello world"
```
- JavaScript
- 1.數組
- 1.數組Api
- 2.判斷是否為數組
- 3.手寫forEach, map, filter, every, some, reduce
- 4.類數組轉化為數組
- 5.reduce實現compose函數
- 7.sort實現與排序
- 2.類型
- 1. let, const, var
- 1. Number 數字
- 3. Boolean 布爾值
- 4. undefined和null
- 2. String 字符串
- 1. 字符串方法
- 2. 操作字符串實例
- 3. startWith&字符串模板
- 5. 類型轉換
- 4.深拷貝與淺拷貝
- 7.Symbol類型
- typeof 和 instanceof
- Set
- Map
- 3.this,原型,原型鏈
- 1.this
- 2.手寫call, apply, bind
- 3.模擬new操作符
- 4.手寫Object.create
- 4.對象
- proxy代理
- defineProperty數據劫持
- 4.模塊化
- 5.http
- ECMAScript
- 0. 調試&兼容性&錯誤處理
- 3. 運算
- 4. 對象(三種引用類型&正則)
- 1. 數組
- 1. 數組的六種遍歷方法
- 2. 數組的增刪查改
- 3. 操作數組(展開、join、排序...)
- 4. 補充五種ES6方法
- 2. 函數
- 3. JSON
- 4. 正則
- 附:正則表達式特殊字符
- 5. 面向對象
- es6的繼承
- 6. 控制語句
- 7. ajax
- 8. promise
- 9. 閉包
- 1. 閉包產生三個相同隨機數
- 2. 閉包實現點贊
- 10.箭頭函數
- _isEmpty
- Object.assign(target, obj, obj)
- Math.ceil, round,
- DOM
- 3.1 節點
- 3.2 DOM操作元素
- 3.3 fragment DOM碎片
- 5. 事件
- BOM
- 1. window
- 2. navigation檢測訪問類型
- 3. screen窗口大小內容大小
- 4. history
- promise
- 1.promise使用
- 2.手寫promise
- 3.手寫promise.all
- 生成器generator
- 1.generator的使用
- 2.簡單實現generator
- 手寫async await
- async/await
- 5.防抖節流
- 難點深入
- 1. 瀏覽器&js特點
- 2. JS堆棧與深淺拷貝
- 3. 詳解a++和++a的區別
- 4. JS&jQuery獲取元素的方法
- 5. NodeList和HTMLCollection區別
- 6. var與let的區別
- 7. this 與 bind call apply
- 8. get與post請求的區別
- 9. 閉包
- Dom demo
- 1. JQuery--頁面點擊切換效果
- 2. JQuery-load實現頭尾封裝
- 3. JS--添加移除屬性名
- 4. jQuery--eq()與index()
- 5. table隔行變色
- 6. 改變函數this的指向
- 7. jQuery each遍歷
- ECMAScript demo
- 1. 斐波那契數列
- 2. 數組去重
- 3. 自調用函數生成隨機數
- 瀏覽器、DOM
- 1.從輸入url到頁面加載的全過程
- 2.http與https
- 3.v8垃圾回收機制
- 4.dom事件
- 5.跨域
- 6.強緩存和協商緩存
- 3.eventloop,宏任務和微任務
- 1.什么是任務
- 2.執行順序例題
- 3.執行順序例題,添加script
- 4.執行順序,多個宏任務
- 4.HTTP
- 1.經典五層模型
- 2.http發展歷史
- 3.http三次握手
- 4.URI,URL,URN
- 1.http協議
- 2.https
- http狀態碼
- 5.script標簽defer和async區別
- cookie
- connect: keep-alive