<div class="box"></div>
<input type="text" name="" id="">
<h1>h1</h1>
<script>
var html = document.documentElement;
console.log(html);
</script>
5、操作元素
JavaScript
的
DOM
操作可以改变网页内容、结构和样式,因此可以利用
DOM
操作元素来改变元素里面的内容、属性等。
5.1、改变内容
在
DOM
中改变元素内容通常使用元素的
innerText
和
innerHTML
属性来实现。
示例:
<div class="box"> 今年是<strong>2022</strong>年第一天 </div>
<script>
// 1. 获取元素
var box = document.querySelector('.box');
console.log(box);
// 2. 获取元素的内容
// 2.1 innerHTML
var content = box.innerHTML;
console.log(content);
// 2.2 innerText
var content = box.innerText;
console.log(content);
// 3. 设置元素内容
// 3.1 innerHTML 识别htm标签,同时保留空格和换行
box.innerHTML = '<font color="red">这是红色的字</font>';
// 3.2 innerText 不识别html标签,不保留空格和换行
// box.innerText = '<font color="red">这是红色的字</font>';
</script>
innerHTML和
innerText相同点:
(1)的
innerHTML
或
innerText
属性可以获取对象的内容;
(2)通过给对象的
innerHTML
或
innerText
属性赋值可以改变对象的内容。
innerHTML和
innerText区别:
(1)innerHTML属性会把内容中的 html 元素解析后再执行,而 innerText 不会解析内容中的 html 元素。
(2)
如果
innerText
用于获取对象的内容,当内容中包含有
html
元素时, 获取中它会把
这个元素给删除了,而innerHTML不会。
(3)
如果innerHTML用于设置对象的内容,当内容中包含有 html
元素时,它会把这些元素
原封不动的设置给对象(不删除空格和换行),而innerText会删除空格和换行。
5.2、元素属性
在
DOM
中,改变元素属性是通过
元素对象
.
属性名
的方式来实现的,它同样具有读写功能。元素可操作的常用属性有:src
、
href
、
id
、
alt
、
title
以及自定义属性等。
演示案例:
<img src="1.jpeg">
<script>
var img = document.querySelector('img')
// 获取src属性
console.log(img.src);
// 修改src属性
img.src = '2.jpeg';
// 添加属性
img.alt = '图片';
img.title = '提示';
console.log(img);
</script>
5.3、表单元素
在 Web 开发中,表单是一种常用的元素,利用 DOM 可以操作如下表单元素的属性。
这些属性都具有读写操作,通过 元素对象.属性名 来获取元素属性值,通过 元素对象.属性名= 值 来设置元素属性值。而 checked、selected和disabled 元素属性的值是布尔类型。
演示案例:
<input type="text" name="name" value="123456"><br>
<input type="checkbox" name=""><br>
<select name="">
<option value="">--请选择--</option>
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="重庆">重庆</option>
</select>
<script>
var input = document.querySelector('input')
// 获取type
console.log(input.type);
// 设置type
//input.type = 'password';
// 获取value
console.log(input.value);
// 设置value
input.value = 'jock'
// 获取disabled
console.log(input.disabled);
// false
// 设置 disabled
input.disabled = true;
// 获取元素
var ck = document.querySelector('[type="checkbox"]');
console.log(ck);
// 获取选中状态
console.log(ck.checked); // false
// 设置选中状态
ck.checked = true;
// 获取下拉列表
var sl = document.querySelector('select');
console.log(sl);
//console.log(sl[2]);
var op = sl[2];
console.log(op.selected);
// 设置被选中
op.selected = true;
</script>
5.4、样式元素
在
DOM
中可以通过
JavaScript
来修改元素的大小、颜色和位置等样式。常用方式有:
5.4.1、style
示例:
<style>
.box {
width: 150px;
height: 100px;
background-color: blueviolet;
}
</style>
<div class="box"></div>
<script>
// 通过 JS 来改变 div 的宽和背景颜色
var box = document.querySelector('.box')
//console.log(box);
// 通过 style 方式
box.style.width = '300px';
box.style.backgroundColor = 'red';
</script>
注意:如果样式名称中包含有连接符(-),那么连接符要去掉,同时后面的字母要大写。
5.4.2、className属性
示例:
<style>
.box {
width: 150px;
height: 100px;
background-color: blueviolet;
}
.bg {
width: 200px;
height: 200px;
background-color: cornflowerblue;
}
.ft {
color: white;
}
</style>
<div class="box">这是文字</div>
<script>
// 通过 JS 来改变 div 的宽和背景颜色
var box = document.querySelector('.box');
console.log(box.className);
box.className = 'bg ft'
</script>
说明:
(1)通过对象.className 的方式可以获取当前对象的样式名称;
(2)通过对象.className='值' 的方式可以给当前对象设置样式。
5.5、操作属性、
对属性的操作也可以设置属性值,也可获取属性值。
5.5.1、setAtrribute()
这个方法可以给元素设置属性。它的语法如下:
对象名称.setAttribute('属性名', '属性值');
示例:
<style>
div {
width: 100px;
height: 30px;
border: 1px solid #000000;
}
.bg {
background-color: cornflowerblue;
color: white;
}
</style>
<div title="这是标题">这是内容</div>
<script>
var div = document.querySelector('div')
// 设置属性
div.setAttribute('class', 'bg');
div.setAttribute('title', '我改了标题');
</script>
5.5.2、getAttribute()
这个方法是用于获取对象中的指定属性名称的值。它的语法如下:
属性值
=
对象
.
getAttribute
(
'
属性名
'
) ;
示例:
<div title="这是标题">这是内容</div>
<script>
var div = document.querySelector('div')
// 获取title属性
//console.log(div.title);
var attrValue = div.getAttribute('title');
console.log(attrValue);
</script>
5.5.3 removeAttribute()
这个方法是用于删除对象中指定的属性。它的语法为:
对象
.
removeAttribute
(
'
属性名
'
);
示例:
<div title="这是标题">这是内容</div>
<script>
var div = document.querySelector('div');
// 删除title属性
div.removeAttribute('title');
</script>
5.5.4、自定义属性
自定义属性目的是为了保存并使用临时数据,这些数据不需要从数据库中获取。自定义属性是通过 setAttribute('
属性
', '
值
')
来设置,通过
getAttribute('
属性
')
来获取。
由于有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性,为了解决这种问题,H5
中规定了自定义属性都以
data
-
开头来作为属性名。
H5
中规定的属性定义方式可以使用
getAttribute('
属性
')
方式来获取,也可以使用
H5
中新增的属性获取方式来获取。
示例:
<div data-index="1" data-list-name="jock"></div>
<script>
var div = document.querySelector('div');
console.log(div.getAttribute('data-index'));
div.setAttribute('data-title', '标题');
</script>
6、DOM事件
6.1、什么是事件
所谓事件是指文档或浏览器窗口中发生的一些特定的交互瞬间。
JavaScript
与
HTML
之间的交互 就是通过事件来实现的。对于 Web
应用来说,鼠标点击,鼠标移动,按下键盘某个键都是属于事件。而这些相应操作就会触发相应的响应机制来进行事件处理。
6.2、事件的要素
对于事件来说,它包含三个要素:事件源、事件类型和事件处理程序。
(1)事件源:触发事件的元素.
(2)事件类型:触发了哪种类型的事件,如
click
、
mouseover
、
focus
、
keyup
等。
(3)事件处理程序:事件触发后要执行的程序代码,通常是一个函数。
示例:
<button id="btn">点我会触发事件</button>
<script>
// 1. 获取元素
var btn = document.querySelector('#btn')
// 1.事件源:这个按钮就是事件源
// 2. 事件类型:这个按钮要点击后才会触发,那么它的事件类型就是点击事件
// 3. 事件处理程序
btn.onclick = function() {
console.log('你点了我');
};
</script>
6.3、常见鼠标事件类型
DOM
事件非常多,而这些事件中使用最多最频繁的就是鼠标事件,常用的鼠标事件如下表所示。
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>常见鼠标事件类型</title>
<style>
.box {
width: 150px;
height: 100px;
border: 1px solid #000000;
}
.bg {
background-color: cornflowerblue;
}
</style>
</head>
<body>
<div class="box"></div>
<input type="text" id="account" value="123456">
<script>
var box = document.querySelector('.box')
// 单击事件:onclick
/*box.onclick = function () {
console.log('点我干嘛?');
};
// 双击事件:ondblclick
box.ondblclick = function () {
console.log('别烦我。');
};
*/
// 鼠标经过时触发:onmouseover
box.onmouseover = function () {
this.className = 'box bg';
};
// 鼠标离开时触发:onmouseout
box.onmouseout = function () {
this.className = 'box';
};
// 鼠标移动时触发:onmousemove
box.onmousemove = function () {
console.log('你摸我干嘛');
};
var input = document.querySelector('#account')
// 获取鼠标焦点时触发:onfocus
input.onfocus = function () {
//console.log(this.value)
this.style.backgroundColor = 'cornflowerblue';
};
// 失去鼠标焦点时触发:onblur
input.onblur = function () {
this.style.backgroundColor = '';
console.log(this.value);
};
// 文本框内容改变时触发:onchange
input.onchange = function () {
console.log('内容已经被修改');
};
// 文本框内容被选中时触发:onselect
input.onselect = function () {
console.log('我不想当干部');
};
</script>
</body>
</html>