文档对象模型(Document Object Model 简称DOM),是 W3C 组织推荐的处理可扩展标记语言(html或xhtml)的标准编程接口
W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容,结构和样式
DOM树又称文档树模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前页面。
- 文档: 一个页面就是一个文档,DOM中使用 document 表示。
- 节点:网页中的所有内容,在文档中都是节点(标签、属性、注释等),使用node表示
- 标签节点:网页中的所有标签,通常称为元素节点,又简称为”元素“,使用element表示
我们想要操作页面上的某个部分元素,需要先获取到该部分对应的元素,在对其进行操作
语法: document.getElementById(id)
作用: 根据 id 获取元素对象
参数: id的值,注意:区分大小写
返回值: 元素对象 或 nul
代码案例
<body>
<div id="time">四岁爱上了她</div>
<script>
//获取 time 元素
var timers = document.getElementById('time');
console.log(timers);
console.log(typeof timers);
</script>
</body>
语法:document.getElementsByTagName('标签名’) 或者 element.getElementsByTagName('标签名')
注意: element 是写 标签名(div等等)或者 你自己写的 class名 或者 ID名,不要傻乎乎的把 element 写上去了
参数: 标签名
返回值: 元素对象集合(这是个伪数组,)
代码演示
<body>
<ul>
<li>四岁爱上了她1</li>
<li>四岁爱上了她2</li>
<li>四岁爱上了她3</li>
<li>四岁爱上了她4</li>
<li>四岁爱上了她5</li>
</ul>
<ul id="nav">
<li>云青1</li>
<li>云青1</li>
<li>云青1</li>
<li>云青1</li>
</ul>
<script>
//获取 li 元素
//这个使用 document.getElementByTagName(参数)
var lis = document.getElementByTagName('li');
//把 li 打印出
console.log(lis);
//打印 lis 第一个元素
console.log(lis[i]);
//想要依次把元素对象打印出可以采取遍历的方式
for(var i=0; i < lis.length;i++){
console.log(lis[i]);
}
//这个使用 element.getElementByTagName(参数)
//先通过 ID 获取 ul 的元素
var nav = document.getElementById('nav');
//在获取 li 元素
var nacLi = nav.getElementByTagName('li')
//打印 nacLi 元素
console.log(nacLi);
</script>
</body>
1.document.getElementsByClassName('类名') //根据类名返回元素集合, 这个 不需要添加符号
2.document.querySelector('选择器') //根据指定选择器返回第一个元素对象
3.document.querySelectorAll('选中器') //根据指定的选择器返回所有元素对象
注意: document.querySelectou / querySelectorAll 后面的参数是需要带符号的
由于随着浏览器的更新,我们获取元素的方法基本使用 document.querySelectou / querySelectorAll 这两种方法,根据ID什么的很少使用了
代码演示
<body>
<div class="box”>盒子1</div>
<div class="box”>盒子2</div>
<div id="nav">
<ul>
<li>首页</li>
<li>产品</li>
</ul>
</div>
<script>
//1. getElementByClassName 根据类名获取元素集合 这个不需要加符号
var boxs = document.getElementByClassName('box')
console.log(boxs);
//2. querySelector 根据指定选择器返回第一个元素对象 切记 里面的选择器需要加符号 .box #nav 标签不需要加符号,比如 div li 之类的
var firstbox = document.querySelector('.box');
console.log(firstbox);
var nav = document.querySelector('#nav');
console.log(nav);
// 参数是标签的不需要 跟写css样式一样,标签不需要加符号
var li = document.querySelector('li')
console.log(li);
//3.querySelectorAll 返回指定选择器的所有元素对象集合
var allBox =document.querySelectorAll('.box');
console.log(allBox);
var lis = document.querySelectorAll('li');
console.log(lis);
</script>
</body>
我们可以通过JS修改元素的大小、颜色、位置等样式。
常用样式
1.element.style 行内样式操作
2.element.className 类名样式操作
3.element.classList 类名样式操作
<body>
<script>
// 无效!
document.body.style.margin = 20;
alert(document.body.style.margin); // ''(空字符串,赋值被忽略了)
// 现在添加了 CSS 单位(px)— 生效了
document.body.style.margin = '20px';
alert(document.body.style.margin); // 20px
</script>
</body>
<body>
<div class="box">
淘宝二维码
<img src="../自己练习/img/tao.png" alt="">
<i class='guannBi'>X</i>
</div>
<script>
//要求:点击❌号,二维码关闭
var box = document.querySelector('.box');
var guanBi = document.querySelector('.guannBi');
guanBi.onclick = function(){
box.style.display = 'none';
}
</script>
</body>
代码演示
className
<style>
.sisui{
background-color: pink;
}
</style>
<body>
<div class="first">文本</div>
<script>
// 1. 使用 element.style 获得修改元素样式 如果样式比较少 或者 功能简单的情况下使用
var test = document.querySelector('div');
test.onclick = function() {
// this.style.backgroundColor = 'purple';
// this.style.color = '#fff';
// this.style.fontSize = '25px';
// this.style.marginTop = '100px';
// 2. 我们可以通过 修改元素的className更改元素的样式 适合于样式较多或者功能复杂的情况
// 3. 如果想要保留原先的类名,我们可以这么做 多类名选择器
// this.className = 'change';
this.className = 'sisui';
}
</script>
</body>
classList
classList 的方法:
<style>
.text {
color: green;
font-size: 24px;
}
.danger {
color: red;
}
</style>
</head>
<body>
<!-- 通过类名来控制样式 -->
<p class="text">四岁爱上了她</p>
<!-- 学习 js 如何 添加 删除 类名 -->
<script>
var pEl = document.querySelector("p");
// 追加类名
pEl.classList.add("danger");
// 删除类名
pEl.classList.remove("text");
// 检查是否含有某个类名
console.log(pEl.classList.contains("text")); // false
console.log(pEl.classList.contains("danger")); // true
</script>
</body>
javaScript 使我们有能力创建动态页面,而事件是可以被侦测到的行为。
触发----响应 的一种行为
<body>
<div>123</div>
<script>
// 执行事件步骤
// 点击div 控制台输出 我被选中了
// 1. 获取事件源
var div = document.querySelector('div');
// 2.绑定事件 注册事件
// div.onclick
// 3.添加事件处理程序
div.onclick = function() {
console.log('我被选中了');
}
</script>
</body>
代码演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.box {
width: 200px;
height: 200px;
background-color: red;
}
</style>
<script>
window.onload = function () {
// 页面加载完成时 执行
console.log(2);
};
</script>
</head>
<body>
<div class="box"></div>
<input type="text" />
<script>
console.log(1);
// 点击事件 onclick
// 鼠标事件
// onmouseover onmouseout
// onmousedown onmouseup
// onmousemove
var box = document.querySelector(".box");
// box.onmouseover = function () {
// console.log("鼠标over事件触发");
// };
// box.onmouseout = function () {
// console.log("鼠标out事件触发");
// };
box.onmousedown = function () {
console.log("鼠标按下");
};
box.onmouseup = function () {
console.log("鼠标松开");
};
box.onmousemove = function () {
console.log("鼠标移动");
};
// 表单事件
var input = document.querySelector("input");
input.onfocus = function () {
console.log("输入框获得焦点了");
};
input.onchange = function () {
console.log("用户改变输入内容了");
};
// 键盘事件
// onkeyup onkeydown
// 文档事件
// onload 页面加载完成时触发
</script>
</body>
</html>
elem.onclick = null
这样就解绑了点击事件