1.创建节点:createElement
只会在内存中显示,不会在页面中显示
var oBtn = document.getElementById("btn");
oBtn.onclick = function(){
var newLi = document.creatElement("li");
console.log(newLi)
}
2.节点添加内容:createTextNode
给节点添加内容:
- 创建文本节点 并插入到元素节点中
- document.createTextNode("文本内容");
var oBtn = document.getElementById('btn');
oBtn.onclick = function () {
var newLi = document.createElement("li");
console.log(newLi)
var newLiCon = document.createTextNode("新的li");
console.log(newLiCon)
}
3.插入节点: A.appendChild(B)
A.appendChild(B)
-在A元素内部的末尾 添加节点B
A.insertBefore(new,old);
-new和old都是A的子节点
-把new插入到old的前边
-new和old是兄弟关系
把已经存在的元素插入到父元素的最下边,会产生覆盖,其实和调换位置一样
4.复制节点:A.cloneNode()
A.cloneNode(); 复制的A节点
cloneNode参数:
-true:深复制当前节点 及内部子节点
-false:浅复制当前节点 不会复制内容子节点
5.删除节点
A.removeChild(B); 在A中 删除元素B B是A的子元素
B.remove(); 直接删除B节点
6.替换节点
A.replaceChild(new,old)
A是new和old的父级
把new来替代old
7.元素内容操作(innerHTML…)
innerHTML:设置和获取元素内容
- 设置的时候:可以把标签解析,并且覆盖原来内容(可以进行加标签)
- 获取的时候:可以把标签都获取出来
innerText:设置和获取元素内容
- 设置的时候:不会解析标签,把标签当做普通字符串(加不了标签)
- 获取的时候:不会获取到标签
textContent:设置和获取元素内容(IE9+)
- 设置的时候:和innerText一致
- 获取的时候:和innerText一致,获取的时候可以获取到空格换行等
outerHTML:
-设置:把当前元素直接替换 其他和innerHTML一致
-获取:也可以获取到当前的标签 其他和innerHTML一致
outerText:
-设置:替换当前元素 不解析标签
-获取:获取当前元素 只获取内容 和innerText结果一致
8.元素属性分类
元素的属性分类:
- 自有属性:元素自带的一些属性
- 设置和获取的时候:元素.属性名
- 当有的属性名和js的关键字保留字冲突的时候,需要适当的修改,比如class,当获取和设置的时候使用className
- 自定义属性:
- 不能直接通过 元素.属性名 来操作
- 可以设置成功,但是是把元素当做了一个对象 设置了属性或方法,并没有设置给DOM节点上
9.元素自定义属性
自定义属性的添加 删除 获取 修改
添加:
setAttribute(key,value);
获取:
getAttribute(key)
删除:
removeAttribute(key);
修改:
直接设置覆盖即可
10.HTML5自定义属性
首先html5规定,自定义属性需要用data-*为前缀
使用html5规定设置自定义属性的时候,也会自动添加data-*前缀
每一个元素都有一个dataset属性,这个属性是一个对象,包含了当前元素所有的自定义属性的key-value值
只要对元素的dataset属性操作,则就可以对当前元素的自定义属性操作了
11.事件流
W3C事件流分三个阶段执行:
1. 捕获阶段,元素从最不精确的元素 相继执行到 最精确的目标元素
2. 目标阶段,执行目标元素的事件
3. 冒泡阶段,元素从最精确的元素 相继执行到 最不精确的元素
4. W3C提供了新的事件模型,我们可以规定元素的事件在哪一个阶段执行
12.基本事件模型特点
动态绑定:把一个函数赋值给了事件属性,并且当事件发生的时候,函数自动执行,也就是我们常用的on事件
oBtn.onclick = function(){};
静态绑定:
function fn(){
alert(1);
}
基本事件模型的特点:
1.对同一个元素绑定事件多次,则会覆盖
oCon.onclick = function () {
alert(1);
}
oCon.onclick = function () {
alert(2);
}//只输出 2
2.默认冒泡
<div id="outer">
outer
<div id="inner">
inner
<div id="con">con</div>
</div>
</div>
oCon.onclick = function () {
alert(1);
}
oInner.onclick = function () {
alert(2);
}
oOuter.onclick = function () {
alert(3);
}
13.DOM2S事件模型
DOM2事件模型:(注册事件,事件监听)(IE9+)
- 使用 Ele.addEventListener();
- 参数1:事件名(不带on)
- 参数2:事件函数
- 参数3:布尔值 代表捕获或者冒泡(true捕获 false冒泡)
特点:
- 可以给同一个元素绑定多次事件
- 可以控制冒泡和捕获
- DOM2也提供了一些事件,只能通过DOM2的方式绑定事件 比如DOMContentLoaded事件
移除DOM2事件:
- removeEventListener()
- 参数1:移除的是哪一个事件
- 参数2:移除的是当前事件的哪一个事件函数
14.IE事件模型
绑定事件:attachEvent();只支持冒泡
- 参数1:on+事件名
- 参数2:事件函数
移除事件detachEvent():
- 参数1:on+事件名
- 参数2:事件函数
15.DOMContentLoaded事件
onload:当节点及所有的资源全部加载完成以后触发
DOMContentLoaded事件:
当节点加载完成以后触发 不需要等待资源加载
<div id="outer">
<img src="../images/01.jpg" alt="">
</div>
window.onload = function () {
var oImg = document.querySelector('#outer img');
console.log(oImg)
console.log("*************")
console.log(oImg.offsetWidth)
}
window.addEventListener("DOMContentLoaded", function () {
var oImg = document.querySelector('#outer img');
console.log(oImg)
console.log("----------")
console.log(oImg.offsetWidth)
16.event事件模型
event事件对象:
- event对象由事件自动创建,记录了当前事件的状态
获取event事件对象:
- W3C规定,在事件发生的时候,会自动的向事件函数传递一个实参,这个实参是event事件对象
- IE8以下:直接把事件对象放在了window对象上,在事件中获取window.event即可获取
- event对象中有一个target属性,代表当前事件发生的目标元素
var oBox = document.getElementById('box');
oBox.onclick = function (e) {
var e = e || window.event;
console.log(e);
}
17.even事件对象属性
clientX: 获取事件发生位置 到 视口的 距离
offsetX: 获取事件发生位置 到 精确的目标元素边缘的距离
pageX: 获取事件发生位置 到 文档边缘的距离
screenX: 获取事件发生位置 到 电脑屏幕边缘的距离
oBox.onclick = function (e) {
console.log(e.clientY);
console.log(e.offsetX);
console.log(e.pageY);
console.log(e.screenY);
18.图片随鼠标移动案例
<style>
img {
width: 30px;
height: 40px;
position: fixed;
left: 0;
top: 0;
}
</style>
</head>
<img src="../img/x1.jpg" alt="">
<script>
var oImg = document.querySelector('img');
document.onmousemove = function (e) {
oImg.style.left = e.clientX + "px";
oImg.style.top = e.clientY + "px";
}
</script>
19.阻止冒泡
event.stopPropagation()
20.阻止传播
主流浏览器:e.stopPropagation();
低版本IE:e.cancelBubble = true
<div id="outer">
<div id="inner"></div>
</div>
var oInner = document.getElementById('inner')
var oOuter =document.getElementById('outer')
oOuter.onclick = function(){
console.log("1");
}
oInner.onclick = function(e){
e.stopPropagation();
}
21.阻止默认事件
默认事件:
- 表单默认提交
- 右键菜单
- 选中文字
在有的时候还不需要这些默认事件,则需要阻止默认事件
主流:e.preventDefault();
IE:e.returnValue = false;
还有一个简单粗暴的阻止默认事件:
return false;
但是必须写在最后一行,否则return就会立即退出函数
var oForm = document.getElementById('form');
oForm.onsubmit = function(e){
return false;
}
22.键盘事件的event
keyCode可以拿到键码,上下左右键码:38.40.37.39
document.onkeydown = function (e) {
if (e.keyCode === 39) {
alert(1)
}
}
23.事件委托
事件委托、事件代理、事件托管:
-什么叫事件委托:
-事件就是绑定的普通事件,委托就是不绑定给目标元素,而是绑定给父元素或祖辈元素
-event对象中有一个target属性,代表当前事件发生的目标元素
事件委托的原理:
-冒泡
事件委托的优点:
- 减少for循环,提高效率
- 可以给未来的元素绑定事件
利用事件委托其实是为了规避冒泡,防止点击子元素的时候,父元素也激活点击效果
24.滚轮事件
谷歌/ie:
onmousewheel事件
上滚:wheelDelta:120
下滚:wheelDelta:-120
火狐:
DOMMouseScroll事件
上滚:detail -3
下滚:detail 3
兼容性书写
var oBox = document.getElementById('box');
var boxWidth = 100;
function scrollFn(e) {
if (e.wheelDelta) {
if (e.wheelDelta > 0) {
boxWidth++;
} else {
boxWidth--;
}
} else {
if (e.detail < 0) {
boxWidth++;
} else {
boxWidth--;
}
}
oBox.style.width = boxWidth + "px";
}
oBox.addEventListener("DOMMouseScroll", scrollFn, false)
oBox.onmousewheel = scrollFn;
25.创建文档碎片节点
<button id="btn">点击</button>
<ul id="outer"></ul>
<script>
var oBtn = document.getElementById('btn');
var oOuter = document.getElementById('outer')
var frag = document.createDocumentFragment()
oBtn.onclick = function(){
for(var i = 0; i < 100; i++){
var newLi = document.createElement("li")
newLi.innerHTML = "li";
frag.appendChild(newLi);
}
oOuter.appendChild(frag)
}
</script>