DOM (文档对象模型/Document Object Model)
获取元素
通过 ID 获取
1
| var box = document.getElementById("mybox");
|
根据 标签名 获取
返回的是元素对象集合 以数组的形式存储
如果要获取每个具体标签对象,通过循环遍历的方式
1 2 3 4 5 6 7
| <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul>
|
1
| document.getElementsByTagName("li");
|
根据 类名 获得
1
| document.getElementsByClassName("box");
|
返回指定选择器的第一个
1
| <div id="nav" class="box"></div>
|
1 2
| document.querySelector(".box"); document.querySelector("#nav");
|
返回指定选择器的第一个
1 2
| <div class="box"></div> <div class="box"></div>
|
1
| document.querySelectorAll(".box");
|
获取 body html 元素
1 2 3
| document.body;
document.documentElement;
|
事件
事件源 事件类型 处理程序
绑定事件
on 的方式
通过 on 的方式给元素注册事件的时候,注册用一个事件,那么最后的事件会覆盖前面的事件
1 2 3
| document.querySelectorAll(".box").onclick = function() { };
|
常见的鼠标事件
事件名 |
触发条件 |
onclick |
点击事件 |
onmouseenter |
鼠标经过触发 |
onmouseleave |
鼠标离开 |
onfocus |
获得焦点 |
onblur |
失去焦点 |
onmousemove |
鼠标移动触发 |
onmouseup |
鼠标弹起 |
onmousedown |
鼠标按下 |
contextmenu |
上下文菜单 |
selectstart |
开始选中 |
常见的键盘事件
事件名 |
触发条件 |
oninput |
输入事件 |
onkeydown |
按下 |
onkeyup |
松开 |
onkeypress |
按下(不能获取系统按键) |
事件监听的方式(多个人使用)
1
| 事件源.addEventListener(事件类型, 处理程序, boolean);
|
移动端触屏事件
事件名 |
触发条件 |
touchstart |
按下事件 |
touchmove |
移动事件 |
touchend |
抬起事件 |
1 2 3 4 5 6 7 8 9 10
| var div = document.querySelector(".box"); div.addEventListener("touchstart", function() { console.log("按下事件"); }); div.addEventListener("touchend", function() { console.log("抬起事件"); }); div.addEventListener("touchmove", function() { console.log("移动事件"); });
|
删除事件
on 的方式
事件监听的方式
1
| 事件源.removeEventListener(事件类型, 处理程序(命名函数));
|
事件对象
PC 端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| e.stopPropagation(); e.cancelBubble = true; e.target; e.target; e.key; e.keyCode;
e.clientX; e.clientY;
e.offsetX; e.offsetY;
e.pageX; e.pageY;
e.screenX; e.screenX;
|
手机端 TouchEvent
1 2 3 4 5 6 7 8 9 10 11 12
| e.touches;
e.touches.clientX;
e.touches.pageX;
e.touches.screenX;
e.targetTouches;
e.changedTouches;
|
操作元素
操作元素内容
获取 写 元素内容
1 2
| element.innerText; element.innerHTML;
|
操作表单
值
1 2
| element.value; element.value = "";
|
属性
1 2 3 4
| element.type = 值; element.checked = 值; element.selected = 值; element.disabled = 值;
|
操作元素样式
行内样式
1
| element.style.css属性名 = 值;
|
添加类名
1
| element.className = "类名";
|
操作属性
1 2 3 4 5 6 7 8 9
| element.属性; element.属性 = 值; element.getAttribute("属性"); element.setAttribute("属性", 值); element.removeAttribute("属性");
element.dataset.属性名; element.dataset.属性名 = 值;
|
节点操作
页面中所有的内容都是节点
查找元素
1 2 3 4 5 6 7 8 9 10 11 12
| node.parentNode; node.children;
node.children[0]; node.firstElementChild;
node.children[element.children.length - 1]; node.lastElementChild;
node.nextElementSibling;
node.previousElementSibling;
|
创建节点
先创建 在添加
1 2 3 4 5
| document.createElement("标签名");
node.appendChild("子元素"); node.insertBefore("子元素", 谁的前面);
|
删除节点
复制节点
先克隆 在添加
1
| node.cloneNode(boolean);
|
BOM (浏览器对象模型/Browser Object Model)
常见事件
只能写一次,多个会加载最后一个
1 2 3 4 5 6
| window.onload = function() {}; document.addEventListener("DOMContentLoaded", function() {});
window.onresize = function() {}; document.addEventListener("resize", function() {});
|
定时器
setTimeout()
延时多少时间后执行
1 2 3 4
| setTimeout(function() {}, time);
clearTimeout(定时器编号);
|
setInterval()
每隔一段时间执行一次
1 2 3 4
| setInterval(function() {}, time);
clearInterval(定时器编号);
|
this 指向问题
- 在全局下,this 指向 window
- 在对象的方法下,this 指向调用对象
- 构造函数中,this 指向新的对象
- apply 调用 this,指向 apply 的第一个参数
location 对象
获取或设置窗体 URL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| location.href = "路径";
location.href;
window.open(页面路径);
location.assign(页面路径);
location.replace(路径);
location.reload(boolean);
location.host;
location.hostname;
location.pathname;
location.port;
location.protocol;
location.search;
window.URL.createObjectURL(url);
|
navigator 对象
history 对象
1 2 3
| history.back(); history.forward(); history.go();
|
获取元素位置和大小
offset
获取元素距离带有定位父元素的距离
1 2 3 4 5 6 7 8
| 对象名.offsetLeft;
对象名.offsetTop;
对象名.offsetWidth;
对象名.offsetHeight;
|
clien
1 2 3 4 5 6 7 8
| 对象名.clientLeft;
对象名.clientTop;
对象名.clientWidth;
对象名.clientHeight;
|
scrool
滚动
1 2 3 4 5 6 7 8 9 10
| 对象名.scroolLeft;
对象名.scrollTop;
对象名.scrollWidth;
对象名.scrollHeight;
window.pageYOffset;
|
立即执行函数
不需要调用 立马能够执行
click 延时解决方案
1
| <meta name="viewport" content="user-scalable=no" />
|
利用 touch 事件自己封装
触摸记录当前时间 离开记录离开时间 如果小于 150ms 并且没有滑动 那么就是点击
fastclick 插件