document.getElementById('id');
getElementsByTagName()
方法可以返回带有指定标签名的对象的集合。document.getElementsByTagName('标签名');
element.getElementsByTagName('标签名');
document.getElementsByClassName('类名');
document.querySelector('选择器');
document.querySelectorAll('选择器');
注意:
querySelector
和querySelectorAll
里面的选择器需要加符号,比如:document.querySelector('#nav');
doucumnet.body // 返回body元素对象
document.documentElement // 返回html元素对象
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<script>
// 1.获取 body 元素
var bodyEle = document.body;
console.log(bodyEle);
console.dir(bodyEle);
// 2.获取 html 元素
var htmlEle = document.documentElement;
console.log(htmlEle);
console.dir(htmlEle);
script>
body>
html>
鼠标事件 | 触发条件 |
---|---|
onclick |
鼠标点击左键触发 |
onmouseover |
鼠标经过触发 |
onmouseout |
鼠标离开触发 |
onfocus |
获取鼠标焦点触发 |
onblur |
失去鼠标焦点触发 |
onmousemove |
鼠标移动触发 |
onmouseup |
鼠标弹起触发 |
onmousesedown |
鼠标按下触发 |
DOCTYPE html>
<html lang="zh-CN">
<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>事件三要素title>
head>
<body>
<button id="btn">点击一下button>
<script>
// 点击一个按钮,弹出对话框
// 1.事件是有三部分:事件源、事件类型、事件处理程序
//(1)事件源:事件被触发的对象。谁--按钮
var btn = document.getElementById("btn");
//(2)事件类型:如何触发,什么事件,比如鼠标点击还是鼠标经过,还是键盘按下
//(3)事件处理程序,通过一个函数赋值的方式完成
btn.onclick = function () {
alert("点击了按钮");
};
script>
body>
html>
element.innerText
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<div>div>
<script>
// innerText 和 innerHTML的区别 // 1.innerText
var div = document.querySelector("div");
div.innerText = "今天是:2022";
script>
body>
html>
element.innerHTML
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<div>div>
<script>
// innerText 和 innerHTML的区别
// 1.innerText
var div = document.querySelector("div");
// div.innerText = "今天是:2022";
// 2.innerHTML
div.innerHTML = "今天是: 2022";
script>
body>
html>
- innerText innerHTML 改变元素内容
- src href
- id alt title
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
<style>
img {
width: 300px;
}
style>
head>
<body>
<button id="ldh">刘德华button>
<button id="zxy">张学友button><br />
<img src="images/ldh.jpg" alt="" />
<script>
// 修改元素属性
// 1.获取元素
var ldh = document.getElementById("ldh");
var zxy = document.getElementById("zxy");
var img = document.querySelector("img");
// 2.注册事件
ldh.onclick = function () {
img.src = "images/ldh.jpg";
};
zxy.onclick = function () {
img.src = "images/zxy.jpg";
};
script>
body>
html>
type value checked selected disabled
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<button>按钮button>
<input type="text" value="输入内容" />
<script>
// 1.获取元素
var btn = document.querySelector("button");
var input = document.querySelector("input");
// 2.注册事件 处理程序
btn.onclick = function () {
// 表单里面的值,文字内容是通过 value来修改的
input.value = "被点击了";
};
script>
body>
html>
- element.style 行内样式操作
- element.className 类名样式操作
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
}
style>
head>
<body>
<div>div>
<script>
var div = document.querySelector("div");
div.onclick = function () {
// div.style.backgroundColor = "green";
// div.style里面的属性,采用驼峰命名法
this.style.backgroundColor = "purple";
this.style.width = "250px";
};
script>
body>
html>
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
}
.change {
background-color: purple;
color: #fff;
font-size: 25px;
margin-top: 100px;
}
style>
head>
<body>
<div>文本div>
<script>
var div = document.querySelector("div");
div.onclick = function () {
// this.style.backgroundColor = "purple";
// this.style.color = "#fff";
// this.style.fontSize = "25px";
// this.style.marginTop = "100px";
// 让我们当前元素的类名改为了 change
this.className = "change";
};
script>
body>
html>
如果有同一组元素,我们想要某一个元素实现某种样式, 需要用到循环的排他思想算法:
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<button>按钮1button>
<button>按钮2button>
<button>按钮3button>
<button>按钮4button>
<button>按钮5button>
<script>
// 1.获取所有按钮元素
var btns = document.getElementsByTagName("button");
for (var i = 0; i < btns.length; i++) {
btns[i].onclick = function () {
// (1)我们先把所有的按钮背景颜色去掉
for (var i = 0; i < btns.length; i++) {
btns[i].style.backgroundColor = "";
}
// (2)然后才让当前的元素背景颜色为 pink
this.style.backgroundColor = "pink";
};
}
script>
body>
html>
区别:
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<div id="demo" index="1">div>
<script>
var div = document.querySelector("div");
// 1.获取元素的属性值
// (1)element.属性
console.log(div.id);
// (2)element.getAttribute('属性')
// get 得到,获取 attribute 属性的意思
console.log(div.getAttribute("id"));
console.log(div.getAttribute("index"));
script>
body>
html>
区别:
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<div id="demo" index="1" class="nav">div>
<script>
var div = document.querySelector("div");
// 1.获取元素的属性值
// (1)element.属性
console.log(div.id);
// (2)element.getAttribute('属性')
// get 得到,获取 attribute 属性的意思
console.log(div.getAttribute("id"));
console.log(div.getAttribute("index"));
// 2.设置元素属性值
// (1)element.属性 = '值';
div.id = "test";
div.className = "navs";
// (2)element.setAttribute(‘属性’);
div.setAttribute("index", "2");
div.setAttribute("class", "footer");
// 3.移除属性 element.removeAttribute('属性');
div.removeAttribute("index");
script>
body>
html>
node.parentNode
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<div>我是divdiv>
<span>我是spanspan>
<ul>
<li>我是lili>
<li>我是lili>
<li>我是lili>
<li>我是lili>
ul>
<div class="demo">
<div class="box">
<div class="erweima">xdiv>
div>
div>
<script>
// 1. 父节点 parentNode
var erweima = document.querySelector(".erweima");
// var box = document.querySelector('.box');
// 得到的是离元素最近的父级节点,如果找不到父节点就返回为 null
console.log(erweima.parentNode);
script>
body>
html>
1. parentNode.childNode //标准
2. parentNode.children //非标准
parentNode.childNodes
返回包含指定节点的子节点的集合,该集合为即时更新的集合。
注意:返回值里面包含了所有的子节点,包括元素节点,文本节点等。
如果只想要获得里面的元素节点,则需要专门处理。 所以我们一般不提倡使用childNodes
parentNode.children
是一个只读属性,返回所有的子元素节点。它只返回子元素节点,其余节点不返回 (这个是我们重点掌握的)。
虽然children 是一个非标准,但是得到了各个浏览器的支持,因此我们可以放心使用。
案例
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<div>我是divdiv>
<span>我是spanspan>
<ul>
<li>我是lili>
<li>我是lili>
<li>我是lili>
<li>我是lili>
ul>
<ol>
<li>我是lili>
<li>我是lili>
<li>我是lili>
<li>我是lili>
ol>
<div class="demo">
<div class="box">
<div class="erweima">xdiv>
div>
div>
<script>
// DOM 提供的方法 (API) 获取
var ul = document.querySelector("ul");
// var lis = ul.querySelect('li');
// 1.子节点 childNodes 所有的子节点,包含:元素节点,文本节点等等
console.log(ul.childNodes);
// 1.children 获取所有的子节点元素 也是我们实际开发常用的
console.log(ul.children);
script>
body>
html>
3. parentNode.firstChild
4. parentNode.lastChild
5. parentNode.firstElementChild
6. parentNode.lastElementChild
注意:firstElementChild和lastElementChild,这两个方法有兼容性问题,IE9 以上才支持。
实际开发中,firstChild 和 lastChild 包含其他节点,操作不方便,而 firstElementChild 和 lastElementChild 又有兼容性问题,那么我们如何获取第一个子元素节点或最后一个子元素节点呢?
解决方案:
如果想要第一个子元素节点,可以使用 parentNode.chilren[0]
如果想要最后一个子元素节点,可以使用 parentNode.chilren[parentNode.chilren.length - 1]
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<ol>
<li>我是li1li>
<li>我是li2li>
<li>我是li3li>
<li>我是li4li>
ol>
<script>
var ol = document.querySelector("ol");
// 1.firstChild 第一个子节点,不管是文本节点还是元素节点
console.log(ol.firstChild);
// 2.lastChild 最后一个子节点,不管是文本节点还是元素节点
console.log(ol.lastChild);
// 3.firstElementChild 返回第一个子元素节点
console.log(ol.firstElementChild);
// 4.lastElementChild 返回最后一个子元素节点
console.log(ol.lastElementChild);
// 5.实际开发的写法,既没有兼容性问题又返回第一个子元素
console.log(ol.children[0]);
// 6.实际开发的写法,既没有兼容性问题又返回最后一个子元素
console.log(ol.children[ol.children.length - 1]);
script>
body>
html>
1. node.nextSibling
2. node.previousSibling
3. node.nextElementSibling
4. node.previousElementSibling
注意:这两个方法有兼容性问题, IE9 以上才支持。
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<div>我是divdiv>
<span>我是spanspan>
<script>
var div = document.querySelector("div");
console.log(div.nextSibling);
console.log(div.previousSibling);
console.log(div.nextElementSibling);
console.log(div.previousElementSibling);
script>
body>
html>
document.createElement('tagName')
document.createElement() 方法创建由 tagName 指定的 HTML 元素。因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点。
1. node.appendChild(child)
2. node.insertBefore(child, 指定元素)
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<ul>
<li>123li>
ul>
<script>
// 1.创建节点元素节点
var li = document.createElement("li");
// 2.添加节点 node.appendChild(child) node 父级 child 子级 后面追加元素 类似于数组中的push
var ul = document.querySelector("ul");
ul.appendChild(li);
// 3.添加节点 node.insertBefore(child, 指定元素);
var lili = document.createElement("li");
ul.insertBefore(lili, ul.children[0]);
script>
body>
html>
node.removeChild(child)
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<button>删除button>
<ul>
<li>熊大li>
<li>熊二li>
<li>光头强li>
ul>
<script>
// 1.获取元素
var ul = document.querySelector("ul");
var btn = document.querySelector("button");
// 2.删除元素 node.removeChild(child)
btn.onclick = function () {
if (ul.children.length == 0) {
this.disabled = true;
} else {
ul.removeChild(ul.children[0]);
}
};
script>
body>
html>
node.cloneNode()
node.cloneNode() 方法返回调用该方法的节点的一个副本。 也称为克隆节点/拷贝节点
注意:
- 如果括号参数为空或者为 false ,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。
- 如果括号参数为 true ,则是深度拷贝,会复制节点本身以及里面所有的子节点。
DOCTYPE html>
<html lang="zh-CN">
<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>Documenttitle>
head>
<body>
<ul>
<li>1li>
<li>2li>
<li>3li>
ul>
<script>
var ul = document.querySelector("ul");
// 1.node.cloneNode();括号为空或者里面是false是浅拷贝,只复制标签不复制里面的内容
// 2.node.cloneNode(true);括号为true是深拷贝,既复制标签又复制里面的内容
var lili = ul.children[0].cloneNode();
ul.appendChild(lili);
var lili = ul.children[0].cloneNode(true);
ul.appendChild(lili);
script>
body>
html>
区别
document.write 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘
innerHTML 是将内容写入某个 DOM 节点,不会导致页面全部重绘
innerHTML 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂
createElement() 创建多个元素效率稍低一点点,但是结构更清晰
总结:不同浏览器下,innerHTML 效率要比 creatElement 高
关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作。
主要修改dom的元素属性,dom元素的内容、属性, 表单的值等
主要获取查询dom的元素
DOM提供的API 方法: getElementById、getElementsByTagName 古老用法 不太推荐
H5提供的新方法: querySelector、querySelectorAll 提倡
利用节点操作获取元素: 父(parentNode)、子(children)、兄(previousElementSibling、nextElementSibling) 提倡
主要针对于自定义属性。
给元素注册事件, 采取 事件源.事件类型 = 事件处理程序
鼠标事件 | 触发条件 |
---|---|
onclick |
鼠标点击左键触发 |
onmouseover |
鼠标经过触发 |
onmouseout |
鼠标离开触发 |
onfocus |
获取鼠标焦点触发 |
onblur |
失去鼠标焦点触发 |
onmousemove |
鼠标移动触发 |
onmouseup |
鼠标弹起触发 |
onmousesedown |
鼠标按下触发 |
本文参考及图片来源:黑马程序员JavaScript核心教程,前端基础教程,JS必会的DOM BOM操作