《JavaScript提高-笔记》
JS事件的处理
目标
学习使用命名函数和匿名函数设置事件
什么是事件
用户可以对网页的元素有各种不同的操作如:单击,双击,鼠标移动等这些操作就称为事件。事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行。
设置事件的两种方式
-
方式一:命名函数
<input type="button" onclick="函数名()"> JS所有的事件名称都是以on开头
-
方式二:匿名函数
元素对象.onclick = function() { } 这种方式的事件处理函数不能重用
事件处理案例
有两个按钮,点第1个弹出一个信息框,点第2个弹出另一个信息框。分别使用两种不同的方式激活事件
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件驱动函数2种写法</title>
</head>
<body>
<!--产生事件-->
<input type="button" onclick="clickMe()" value="点我试试">
<input type="button" value="匿名函数" id="b2">
<script type="text/javascript">
//事件处理函数:命名函数
function clickMe() {
alert("试试就试试");
}
/*
因为通过id得到元素,所以要写在button的后面
匿名函数写法
元素对象.onclick = function() { }
*/
document.getElementById("b2").onclick = function () {
alert("被你发现了");
}
</script>
</body>
</html>
注意: 在JS来找HTML的标签,script代码要写到HTML标签的下面
小结
-
事件处理中命名函数的写法
<input onclick = "函数名()"/>
-
事件处理中匿名函数的写法
元素对象.onclick = function() { }
事件介绍:onload、ondblclick
目标
- 网页加载完毕事件
- 鼠标双击
网页加载完成事件
-
事件名:window.onload
-
当网页加载完毕后会触发这个事件
-
示例:页面加载完毕以后,才执行相应的JS代码
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>事件</title> <script> // 使用onload事件,在页面加载完毕以后再执行这段代码 window.onload = function () { // alert("加载完了..."); document.getElementById("b1").onclick = function () { alert("被点击了..."); } } </script> </head> <body> <div> 早上好 </div> <input type="button" value="来啊!" id="b1"> <input type="button" value="点我啊!" id="b2"> </body> </html>
鼠标双击击事件
双击:ondblclick
案例演示
需求:双击清除文本内容
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件介绍:onload、ondblclick</title>
<script>
// onload事件
window.onload = function () {
// alert("网页加载完成了");
}
</script>
</head>
<body>
姓名1: <input id="i1"/><br/>
姓名2: <input id="i2"/><br/>
<input type="button" value="双击复制" ondblclick="click01()"/>
<script>
// 命名函数设置事件
function click01() {
// 1.找到上面的输入的内容
var content = document.getElementById("i1").value;
// 2.将内容设置给下面的输入框
document.getElementById("i2").value = content;
}
</script>
</body>
</html>
小结
- 加载完成事件名:window.onload
- 双击事件名:ondblclick
事件介绍:鼠标移入和移出
目标
- 学习鼠标移入事件
- 学习鼠标移出事件
事件名
- 鼠标移入:onmouseover
- 鼠标移出:onmouseout
示例
需求:将鼠标移动到img上显示图片,移出则显示另一张图片。图片设置边框,宽500px
步骤
- 使用img标签显示一张图片
- 设置鼠标移入事件,在这个移入事件中img标签换一张图片
- 设置鼠标移出事件,在这个移出事件中img标签换一张图片
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鼠标移上/移出</title>
</head>
<body>
<img src="img/0.jpg" id="pic" width="600" onmouseover="changePic(this)">
<script type="text/javascript">
// 设置鼠标移入事件
function changePic(obj) {
obj.src = "img/4.jpg";
}
// 鼠标移出事件
document.getElementById("pic").onmouseout = function () {
document.getElementById("pic").src = "img/2.jpg";
}
</script>
</body>
</html>
小结
- 鼠标移入(上):onmouseover
- 鼠标移出:onmouseout
事件介绍:得到焦点、失去焦点、改变事件
目标
- 得到焦点
- 失去焦点
- 改变事件
事件名
- 得到焦点:onfocus
- 失去焦点: onblur
焦点事件示例
当文本框获取到焦点时显示正在输入,得到焦点时显示请输入
实现步骤
- 编写界面
- 设置输入框得到焦点的事件,在事件中,将文字换成正在输入
- 设置输入框失去焦点的事件,在实践中,将文字换成请输入
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>得到焦点和失去焦点</title>
<style>
span {
color: red;
}
</style>
</head>
<body>
用户名: <input onfocus="f3()" onblur="f4()"/><span id="sp">请输入</span>
<script>
// 得到焦点的事件
function f3() {
// innerHTML: 修改标签里面的内容
document.getElementById("sp").innerHTML = "正在输入";
}
// 失去焦点事件
function f4() {
document.getElementById("sp").innerHTML = "请输入";
}
</script>
</body>
</html>
内容改变事件
事件名:onchange
- 选中不同的城市,出现一个信息框显示选中城市的值
- 用户输入英文字母以后,文本框的字母全部变成大写
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>改变事件</title>
</head>
<body>
请输入英文: <input id="i1" onchange="f5()"/>
城市:
<select id="se" onchange="f6()">
<option value="gz">广州</option>
<option value="dg">东莞</option>
<option value="sz">深圳</option>
</select>
<script>
function f5() {
// 得到输入框的值
var str = document.getElementById("i1").value;
// 将小写转成大写
// alert(str.toUpperCase());
document.getElementById("i1").value = str.toUpperCase();
}
function f6() {
var val = document.getElementById("se").value;
alert(val);
}
</script>
</body>
</html>
小结
- 得到焦点事件名: onfocus
- 失去焦点事件名: onblur
- 改变事件事件名: onchange
数组的使用
目标
- 学习JS中数组的创建
- 学习JS数组中的常用方法
回顾Java中的数组
数组: 长度固定,只能存储同一种类型的数据
int[] arr = new int[5];
集合: 长度可变,有对数据增删改查的方法
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.get(0);
JS创建数组的四种方式
Array是JavaScript的内置对象,我们可以直接使用。
创建数组的⽅方式 | 说明 |
---|---|
new Array() | 创建一个长度为0的数组 |
new Array(5) | 创建一个长度为5的数组 |
new Array(2,4,10,6,41) | 指定数组中的元素值创建数组 |
[4,3,20,6] | 指定数组中的元素值创建数组 |
JS数组的特点
- 数组中元素的类型可以不同
- 长度可以动态变化
- 数组中还有方法
数组的常用方法
字符串的比较规则
- 字符串按字母的ASCII码值比较大小,如果第1个字母相同,则比较第2个。
方法演示案例
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS数组</title>
</head>
<body>
<script>
// 数组创建
var array1 = new Array();
document.write(array1 + "<br/>");
var array2 = new Array(5);
document.write(array2 + "<br/>");
// 数组元素类型可以不同
var array3 = new Array(true, 1.1, 22, "hello");
document.write(array3 + "<br/>");
var array4 = [11, 'hello', false, 2.2];
document.write(array4 + "<br/>");
// 数组添加数据
array4.push(22222);
document.write(array4 + "<br/>");
// 数组删除数据
array4.pop();
document.write(array4 + "<br/>");
// 数组修改数据
array4[0] = 100;
// 数组获取数据
document.write("数组获取数据: " + array4[0] + "<br/>");
// 数组长度
document.write(array4.length + "<br/>");
// 遍历数组
for (var i = 0; i < array4.length; i++) {
document.write(array4[i] + "<br/>");
}
document.write("数组方法" + "<br/>");
// 数组方法
var array5 = [1, 2, 3];
var array6 = [4, 3, 2];
// 数组拼接
var array7 = array5.concat(array6);
document.write("concat: " + array7 + "<br/>");
// 数组反转
array7.reverse();
document.write("数组反转: " + array7 + "<br/>");
// 将数组转成字符串,以指定内容连接,和字符串分割相反
var s = array7.join("^_^");
document.write("数组拼接" + s + "<br/>");
// 数组排序
var arr = ['ac','abcdefg','x','AB','3' ];
document.write("排序前: " + arr + "<br/>");
arr.sort();
document.write("排序后: " + arr + "<br/>");
// 数组中是数字,会先将数字变成字符串,然后按照字符串的规则排序
var array8 = [100, 9, 46, 20];
document.write(typeof(array8[0]) + "<br/>");
document.write("排序前: " + array8 + "<br/>");
array8.sort()
document.write("排序后: " + array8 + "<br/>");
// 按照自己的规则来排序
array8.sort(function (a, b) {
// return a - b;
return b - a;
});
document.write("比较器排序后: " + array8 + "<br/>");
</script>
</body>
</html>
小结
方法名 | 功能 |
---|---|
push() | 添加元素 |
pop() | 删除元素 |
concat() | 合并数组 |
reverse() | 数组元素反转 |
join(separator) | 将数组元素个参数进行拼接,形成一个字符串 |
sort() | 数组排序 |
JS内置对象:日期对象
目标
学习JS日期对象方法的使用
创建日期对象
var 变量名 = new Date()
说明:创建一个当前时间的日期对象
日期对象的方法
方法效果
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>日期对象</title>
</head>
<body>
<script>
// 创建Date表示现在的时间
var date = new Date();
document.write(date + "<br/>");
// 以本地的时间显示
document.write("本地时间:" + date.toLocaleString() + "<br/>");
document.write("年:" + date.getFullYear() + "<br/>");
document.write("月:" + date.getMonth() + "<br/>");
document.write("日:" + date.getDate() + "<br/>");
document.write("星期:" + date.getDay() + "<br/>");
document.write("1970年1月1日00:00:00以来的毫秒值:" + date.getTime() + "<br/>");
</script>
</body>
</html>
小结
说说下面Date方法的作用
- getFullYear() 获取年
- getDay() 获取星期
- getTime() 获取自1970年1月1日以来毫秒值
- toLocaleString() 转成本地时间
使用JS修改CSS的样式
目标
学习JS操作CSS样式
在JS中操作CSS属性命名上的区别
CSS中写法 | JS中的写法 | 说明 |
---|---|---|
color | color | 如果只有一个单词,JS写法与CSS一样的 |
font-size | fontSize | 如果有多个单词,使用驼峰命名法 |
JS操作样式方式一
方式 | 说明 |
---|---|
元素对象.style.属性名=“属性值”; | 每一行代码只能修改一个样式,如果有多个样式必须写多条代码实现 |
JS操作样式方式二
方式 | 说明 |
---|---|
元素对象.className=“类名”; | 一条代码可以一次修改多个样式,前提先要创建一个类样式 |
示例:点按钮,修改p标签的字体、颜色、大小
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>通过js修改css样式</title>
<style type="text/css">
.aa {
color: red;
font-size: 50px;
}
.bb {
color: orange;
font-size: 100px;
background-color: lightyellow;
}
</style>
</head>
<body>
<p id="p1">这是第一自然段</p>
<p id="p2" class="aa">这是第二自然段</p>
<input type="button" value="JS改变CSS样式" id="btn1"/>
<input type="button" value="JS改变类样式" id="btn2"/>
<script type="text/javascript">
// 按钮一点击时设置第一个p标签的样式
// 语法: 元素对象.style.样式名="样式值"
document.getElementById("btn1").onclick = function () {
var p1 = document.getElementById("p1");
p1.style.color = "blue";
p1.style.fontFamily = "宋体";
p1.style.fontSize = "30px";
}
// 按钮二点击时设置第二个p标签的class属性的值
// 语法: 元素对象.className="类名"
document.getElementById("btn2").onclick = function () {
document.getElementById("p2").className = "bb";
}
</script>
</body>
</html>
网页变化
小结
JS修改CSS样式的两种方式?
单独修改一个样式: 元素对象.style.样式名 = "样式值";
一次改多个样式,就是修改标签class的值: 元素对象.className = "类名";
案例:鼠标移动到文字上显示提示文字
目标
技术点
display样式 | 说明 |
---|---|
none | 表示元素不可见 |
block | 以块标签显示,有换行 |
inline | 以内联标签显示,没有换行 |
步骤
- 网页上有一个a标签链接,a标签下有一个不可见的div
- 鼠标移到a标签,设置div的样式,让div可见
- 鼠标移出a标签,设置div的样式,让div不可见
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CSS案例</title>
<style type="text/css">
a:link {
text-decoration: none;
}
#info {
width: 180px;
height: 30px;
border: 1px dashed orange;
border-radius: 5px;
text-align: center;
background-color: lightyellow;
/* display: none 隐藏元素*/
display: none;
}
</style>
</head>
<body>
<a id="a1" href="http://ntlias3.boxuegu.com/" onmouseover="f1()" onmouseout="f2()">黑马程序员官网</a>
<div id="d1">点我有惊喜,大大的惊喜!</div>
<script>
// 鼠标移入
function f1() {
// 1. 鼠标移到a标签,设置div的样式,让div可见
document.getElementById("d1").style.display = "block";
}
// 2. 鼠标移出a标签,设置div的样式,让div不可见
function f2() {
document.getElementById("d1").style.display = "none";
}
</script>
</body>
</html>
小结
隐藏元素使用什么样式?
display = none
块级标签显示
display = block;
内联标签显示
display = inline;
BOM介绍
目标
- 学习BOM的概念
- 学习BOM中的3个对象作用
什么是BOM
Browser Object Model: 浏览器对象模型。BOM操作的是浏览器上的对象
BOM对象
BOM常用对象 | 作用 |
---|---|
window | 表示浏览器窗口对象 |
location | 表示地址栏对象 |
history | 表示浏览历史记录对象 |
小结
说出BOM中的3个对象作用?
windows: 表示浏览器窗口
location: 表示浏览器的地址栏
history: 表示浏览器的历史记录
BOM:window中的三个对话框方法
目标
学习window中的三个对话框
语法
confirm案例演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>确认框</title>
</head>
<body>
<script>
// window中的内容可以省略window不写
// 1.提示框
// window.alert("确定吗?");
// alert("确定吗?");
// 2.输入框
// prompt("请输入行数?", "9");
// 3.确认框, 点击确定返回true, 点击取消返回false
var r = confirm("确定吗?");
document.write(r + "<br/>");
</script>
</body>
</html>
小结
window中的方法 | 说明 |
---|---|
alert() | 提示框 |
prompt() | 输入框 |
confirm() | 确认框 |
BOM:location对象
目标
学习location对象的方法和属性
location对象作用:地址栏,是window的一个属性。完整写法:window.location。
location常用属性
- location是window的一个属性
- 可以省略href属性
window.location.href = "地址";
window.location = "地址";
location.href = "地址";
location = "地址";
location常用方法
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>location对象</title>
</head>
<body>
<input type="button" value="刷新" onclick="location.reload()"><br/><br/>
<script>
// 获取:浏览器上访问的地址字符串
// document.write(location.href + "<br/>");
// 设置浏览器访问地址,属性相当于跳转到新的页面
// location.href = "http://www.baidu.com";
// search得到?后面的参数
// alert(location.search)
// 如果location没有写任何属性,默认就是href属性赋值
// location = "http://www.baidu.com";
document.write(new Date() + "<br/>");
</script>
</body>
</html>
小结
-
location学习了哪两个属性
location.href : 得到/修改 地址栏上地址
location.search: 得到地址栏上?及以后的内容 -
location与window是什么关系?
location是window的一个属性,可以省略window
BOM:history对象
目标
学习history对象的3个方法
history作用
表示访问过的历史记录,如果没有历史记录,这个对象中的方法不可用。
注:浏览器上的前进和后退按钮可以点的时候,这个代码才起作用。
读取的是浏览器缓存中数据,如果要访问服务器的数据,需要刷新。
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>历史记录对象</title>
</head>
<body>
<a href="07_date.html">显示时间</a>
<input type="button" value="前进" onclick="history.forward()"/>
<input type="button" value="前进go" onclick="history.go(1)"/>
</body>
</html>
小结
方法 | 作用 |
---|---|
forward()/go(1) | 前进 |
back()/go(-1) | 后退 |
案例:倒计时页面跳转
目标
window对象与location对象的综合案例应用
window中计时器有关的方法
方法名 | 作用 |
---|---|
setTimeout(函数名, 间隔毫秒数) | 在指定的毫秒数后执行指定的代码(只会执行一次),返回值:返回一个整数的计时器。 |
clearTimeout(计时器) | 清除计时器,参数计时器。 |
setInterval(函数名,间隔毫秒数) | 开启一个定时任务,每隔指定的毫秒数执行指定的方法返回值:返回一个整数的计时器器。 |
clearInterval(计时器) | 清除计时器,参数计时器。 |
需求
页面上显示一个倒计时5秒的数字,到了5秒以后跳转到另一个页面
分析
- 在页面上创建一个span用于放置变化的数字。
- 定义一个全局变量为5,每过1秒调用1次自定义refresh()函数
- 编写refresh()函数,时间-1秒,修改span中的数字
- 判断变量是否为0,如果是0则跳转到新的页面
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>倒计时5秒</title>
</head>
<body>
<span id="count">5</span>秒后跳转
<script type="text/javascript">
var count = 5;
// 每过1秒修改1次span中数字
window.setInterval("refresh()", 1000);
// 被调用的函数
function refresh() {
// 减1
count--;
// 更新span
document.getElementById("count").innerHTML = count;
if (count == 0) {
// 跳转到其它页面
location.href = "http://www.baidu.com";
}
}
</script>
</body>
</html>
小结
- 每过一段时间执行的方法是: setIntervale(函数名,时间间隔)
- 某个时间后执行一次的方法是:setTimeOut(函数名,时间间隔)
- 跳转到另一个页面使用: location.href = “新的地址”;
- 更新数字显示使用:找到span标签.innerHTML = “新内容”
案例:轮播图
目标
每过3秒中切换一张图片的效果,一共5张图片,当显示到最后1张的时候,再次显示第1张。
步骤
- 页面中有一个div标签,div标签内包含一个img标签。设置div为居中;img的宽度500px;
- 五张图片的名字依次是0~4.jpg,图片一开始的src为第0张图片。
- 编写函数:refresh(),使用setInterval()函数,每过3秒调用一次。
- 定义全局变量:num=1,表示现在是第几张图片。
- 在refresh()方法中,设置图片的src属性为img/num.jpg。
- 判断num是否等于5,如果等于5,则num=0;否则num++。
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>轮播图</title>
<style type="text/css">
body {
background-color: white;
}
.container {
margin: auto;
border: 1px solid yellowgreen;
width: 500px;
height: 375px;
}
#pic {
width: 500px;
}
</style>
</head>
<body>
<div class="container">
<img src="img/0.jpg" id="pic">
</div>
<script type="text/javascript">
// setInterval定时调用方法
// 每过2000毫秒调用refresh方法
window.setInterval("refresh()", 2000);
// 表示下一张图片的名称
var num = 1;
function refresh() {
// 通过id获取img标签
var img = document.getElementById("pic");
// 给img标签的src重新设置一张图片
img.src = "img/" + num + ".jpg";
num++;
// 如果已经是最后一张图片,切换成最前面一张
if (num == 5) {
num = 0;
}
}
</script>
</body>
</html>
小结
方法 | 描述 |
---|---|
document.getElementById(“id”) | 通过id找到元素 |
window.setInterval(“函数名()”,时间) window.setInterval(函数名,时间) | 每隔指定时间执行对应的函数 |
innerHTML和innerText的区别
目标
学习innerHTML和innerText的区别
语法
元素的属性 | 作用 |
---|---|
innerHTML | 获得:得到标签中主体内容,包含子标签 设置:修改标签中的主体内容 |
innerText | 获得:得到标签中纯文本的内容 设置: 修改标签中主体内容为纯文本,而不是HTML,它的标签不起作用。 |
案例效果
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>innerHTML和innerText</title>
</head>
<body>
<div id="myDiv">
<span>
<a href="#">我是链接</a>
</span>
</div>
<hr/>
<!--innerHTML和innerText区别-->
<input type="button" id="b1" value="得到HTML">
<input type="button" id="b2" value="得到Text">
<input type="button" id="b3" value="设置HTML">
<input type="button" id="b4" value="设置Text">
<script type="text/javascript">
document.getElementById("b1").onclick = function () {
alert(document.getElementById("myDiv").innerHTML);
}
document.getElementById("b2").onclick = function () {
alert(document.getElementById("myDiv").innerText);
}
document.getElementById("b3").onclick = function () {
document.getElementById("myDiv").innerHTML = "<h2 style='color:red'>人鬼情喂鸟</h2>"
}
document.getElementById("b4").onclick = function () {
document.getElementById("myDiv").innerText = "<h2 style='color:red'>人鬼情喂鸟</h2>"
}
</script>
</body>
</html>
小结
元素的属性 | 作用 |
---|---|
innerHTML | 获取时: 会得到里面的标签 设置时: 标签起效果 |
innerText | 获取时: 不会得到里面的标签,只会得到里面的文本 设置时: 标签不起效果,看作普通文本 |
DOM介绍
目标
学习DOM的概念
DOM的概念
Document Object Model: 文档对象模型,就是网页上的标签
每个HTML文档,浏览器在进行解析的时候,都会在内存中创建一棵DOM树,根在上面,下面是节点。节点是元素和属性,文本的父元素。文档就是document对象。
浏览器显示的过程
DOM查找元素的四个方法(重点)
目标
学习DOM查找元素的四个方法
查找节点的方法
案例:查找节点
步骤
- 点第1个按钮,给所有tr奇数行和偶数行添加不同的背景色
- 点击第2个按钮,选中所有商品
- 点击第3个按钮给所有的a链接添加href属性
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获取元素</title>
<style>
table {
width: 60%;
margin: auto;
}
</style>
</head>
<body>
<input type="button" value="(通过标签名)给tr的奇数行添加背景色" onclick="f1()"/>
<input type="button" value="(通过name属性)选中所有的商品" onclick="f2()"/>
<input type="button" value="(通过类名)给a添加链接" onclick="f3()"/>
<hr/>
<table border="1px" cellpadding="5px" cellspacing="0px">
<tr>
<td>100</td>
<td>100</td>
<td>100</td>
</tr>
<tr>
<td>200</td>
<td>200</td>
<td>200</td>
</tr>
<tr>
<td>300</td>
<td>300</td>
<td>300</td>
</tr>
<tr>
<td>400</td>
<td>400</td>
<td>400</td>
</tr>
</table>
<input type="checkbox" name="product"> 自行车
<input type="checkbox" name="product"> 电视机
<input type="checkbox" name="product"> 洗衣机
<hr/>
<a class="company">传智播客</a><br/>
<a class="company">传智播客</a><br/>
<a class="company">传智播客</a><br/>
<script>
// (通过标签名)给tr的奇数行添加背景色
function f1() {
// 多个标签放在集合中
var eles = document.getElementsByTagName("tr");
// 遍历集合
for (var i = 0; i < eles.length; i++) {
if (i % 2 == 0) { // i =0, 2
eles[i].style.backgroundColor = "lightgreen";
} else { // i = 1, 3
eles[i].style.backgroundColor = "lightyellow";
}
}
}
// (通过name属性)选中所有的商品
function f2() {
var eles = document.getElementsByName("product");
for (var i = 0; i < eles.length; i++) {
// 以前标签中选中<input checked="checked"/>
// js中: eles[i].checked = true;
eles[i].checked = true;
}
}
// (通过类名)给a添加链接
function f3() {
var eles = document.getElementsByClassName("company");
for (var i = 0; i < eles.length; i++) {
eles[i].href = "http://ntlias3.boxuegu.com/";
}
}
</script>
</body>
</html>
小结
获取元素的方法 | 作用 |
---|---|
document.getElementById(“id”) | 找到指定id的元素,返回一个元素 |
document.getElementsByTagName (“标签名”) | 通过标签名找到多个标签 |
document.getElementsByName(“name”) | 通过name属性值找到多个标签 |
document.getElementsByClassName(“类名”) | 通过class属性值找到多个标签 |
DOM增删的方法
目标
学习DOM创建节点,添加节点,删除节点
添加元素的步骤
- 创建元素,使用方法:document.createElement(“标签名”)
- 将元素添加到DOM树上,才会在网页显示出来
创建元素方法名 | 作用 |
---|---|
document.createElement(“标签名”) | 创建一个元素,参数是标签名。如:td |
添加和删除元素方法名 | 作用 |
---|---|
父元素.appendChild(子元素) | 将子元素添加父元素上 |
父元素.removeChild(子元素) | 通过父元素删除子元素(他杀) |
元素.remove() | 元素删除本身(自杀) |
通过关系找节点方法
小结
- 创建元素:document.createElement(“标签名”);
- 添加成最后一个子元素:父元素.appendChild(子元素);
- 删除子元素:父元素.removeChild(子元素);
- 删除本身:元素.remove();
案例:学生信息管理
目标
- 当点击“添加”按钮时,文本框中的数据添加到表格中且文本框置空
- 当点击“删除”按钮时,该行数据被删除,删除前确认
- 当点击表格第一行的复选框的时候,下面每一行都选中。当取消的时候,下面每一行都取消
效果
步骤
- 添加的实现:当点击按钮时,得到文本框中的文本,创建tr节点;将这行的内容使用innerHTML直接设置到tr的内部。
- 把tr追加到tbody元素中。
- 删除操作:将当前点击按钮所在的一行tr,从tbody中删除。
- 上面的复选框值改变,则下面所有复选框的选择状态和上面的一样。
代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息管理</title>
<style type="text/css">
table {
width: 500px;
border-collapse: collapse;
}
td {
text-align: center;
}
th {
background-color: lightgrey;
}
</style>
<script type="text/javascript">
//添加一行
function addRow() {
//得到文本框中的值
//得到学号,姓名
var no = document.getElementById("no").value;
var name = document.getElementById("name").value;
//trim去掉前后的空格
if (no.trim() == "" || name.trim() == "") {
alert("学号或姓名不能为空");
return;
}
//创建tr元素
var tr = document.createElement("tr");
tr.innerHTML = "<td>" +
"<input type=\"checkbox\" name=\"item\">" +
"</td>" +
"<td>" + no + "</td>" +
"<td>" + name + "</td>" +
"<td>" +
"<input type=\"button\" value=\"删除\" οnclick=\"deleteRow(this)\">" +
"</td>";
//把tr做为tbody的子元素挂上去
var tbody = document.getElementsByTagName("tbody")[0];
//追加成最后一个子元素
tbody.appendChild(tr);
//清空文本框
document.getElementById("no").value = "";
document.getElementById("name").value = "";
}
//删除一行
function deleteRow(obj) {
//obj表示button按钮
if (confirm("真的删除吗?")) {
//obj 按钮 -> 父元素td -> 父元素tr -> remove()
obj.parentNode.parentNode.remove();
}
}
//全选全不选
function selectAll() {
//得到最上面的是否选中
var all = document.getElementById("all");
//得到所有的复选框
var items = document.getElementsByName("item");
for (var i = 0; i < items.length; i++) {
items[i].checked = all.checked; //设置checked为true表示选中
}
}
</script>
</head>
<body>
<div>
<table border="1" cellspacing="0" cellpadding="3">
<tr>
<th>
<input type="checkbox" id="all" onclick="selectAll()">
</th>
<th>学号</th>
<th>姓名</th>
<th>操作</th>
</tr>
<tr>
<td>
<input type="checkbox" name="item">
</td>
<td>00001</td>
<td>潘金莲</td>
<td>
<input type="button" value="删除" onclick="deleteRow(this)">
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="item">
</td>
<td>00002</td>
<td>鲁智深</td>
<td>
<input type="button" value="删除" onclick="deleteRow(this)">
</td>
</tr>
</table>
<br/>
学号:<input type="text" id="sid" value=""/>
姓名:<input type="text" id="name" value=""/>
<input type="button" id="addBtn" value="添加" onclick="addRow()"/>
</div>
</body>
</html>
小结
- 添加功能的实现,得到输入的内容,创建tr标签,将输入的内容放到tr中,将tr放到tbody中
- 删除功能的实现,知道哪个删除按钮被点击,找到这个删除按钮的爸爸的爸爸,自杀
- 全选功能的实现,得到标题上的复选框的选中状态,找到下面那些复选框,下面那些复选框的状态和上面那个复选框的状态一致即可