[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