上一博文种讲解了JavaScript基础的ECMAScript,包括基本语法和部分对象,本文中继续讲解JavaScript中比较重要的两部分内容BOM、DOM及事件,后文中有对应的实战练习。
DOM是用来控制html文档的内容的: 1)document.getElementById("id值"):通过元素id获取元素对象Element。 2)操作Element对象:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM简单应用</title>
</head>
<body>
<img id="nezha" src="../image/2.png">
<h1 id="title"> 百度一下</h1>
<script>
//通过id获取元素对象
var nezha = document.getElementById("nezha");
alert("换图片");
nezha.src = "../image/1.png";
var text = document.getElementById("title");
alert("换标签");
text.innerHTML = "你就知道";
</script>
</body>
</html>
事件的功能就是,某些组件被执行了某些操作后,触发某些代码的执行,如何绑定事件?
【举例】:事件的简单应用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件的简单应用</title>
</head>
<body>
<img id="nezha" src="../image/2.png" onclick="fun();">
<img id="nezha2" src="../image/2.png">
<script>
function fun() {
alert('我被点击了');
}
var nezha2 = document.getElementById("nezha2");
nezha2.onclick = fun;
</script>
</body>
</html>
BOM,Browser Object Model,浏览器对象模型,就是将浏览器的各个组成部分封装成对象,如下浏览器示例:
BOM的组成包括:
1)Window窗口对象 方法:1、与弹出框有关的: alert(),显示有一段消息或警告窗口; confirm(),显示一段消息以及确认和取消按钮的对话框,用户点击确认按钮,则返回true,否则为false; prompt(),显示可提示用户输入的对话框,用的较少。返回值,获取用户输入的值。 2、与打开关闭有关的: open(),打开新的浏览器窗口,返回一个新的window对象 close(),关闭浏览器窗口,谁调用我我关闭谁
<input id="btnOpen" type="button" value="打开窗口">
<input id="btnClose" type="button" value="关闭窗口">
<script>
var btnOpen = document.getElementById("btnOpen");
var newWindow;
btnOpen.onclick = function(){
newWindow = open("https://www.baidu.com");
}
var btnClose = document.getElementById("btnClose");
btnClose.onclick = function(){
newWindow.close();
}
</script>
3、与定时器有关的: setTimeout(),指定的ms后调用函数或计算表达式,返回值为唯一标识,用于取消定时器; clearTimeout(),取消由setTimeout()方法设置的timeout; setInterval(),按照指定的周期进行,返回值为唯一标识,用于取消定时器; clearInterval(),取消由setInterval()方法 设置的timeout;
属性:1、获取其他BOM对象:history、location、Navigator、Screen; 2、获取DOM对象:window.document. 特点:1、不需要创建对象,可以直接使用,window.方法名(); 2、window引用可以省略,方法名();
【举例】:轮播图的实现,实现思路:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>DOM案例——轮播图</title>
</head>
<body>
<img id="img" src="../image/7演示图片.jpg" width="100%">
<script>
var number = 7;
function fun() {
number++;
if(number>8){
number=7;
}
var img = document.getElementById("img");
img.src = "../image/"+number+"演示图片.jpg";
}
setInterval(fun,3000);
</script>
</body>
</html>
2)Location地址栏对象
创建:1、window.location 2、location 属性:1、href,设置或返回完整的URL 方法:1、reload(),刷新页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Location对象</title>
</head>
<body>
<input id="btn" type="button" value="刷新">
<input id="btn1" type="button" value="去百度">
<script>
var btn = document.getElementById("btn");
btn.onclick = function () {
location.reload();
}
//获取href
var href = location.href;
alert(href);
var btn1 = document.getElementById("btn1");
btn1.onclick = function () {
location.href = "https://www.baidu.com";
}
</script>
</body>
</html>
【举例】自动跳转首页,实现思路:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自动跳转首页</title>
<style>
p{
text-align: center;
}
span{
color: red;
}
</style>
</head>
<body>
<p>
<span id="time"> 5 </span> 秒后,自动跳转到首页...
</p>
<script>
var sec = 5;
var time = document.getElementById("time");
function showTime() {
sec--;
if(sec<=0){
location.href = "https:www.baidu.com";
}
time.innerHTML = sec+"";
}
setInterval(showTime,1000);
</script>
</body>
</html>
2)History历史记录对象
当前window窗口访问过 的历史记录。
创建:1、window.history 2、history 属性:1、length,返回当前浏览器窗口的浏览历史记录; 方法:1、back(),加载history 列表中的前一个URL; 2、forward(),加载history列表中的下一个URL; 3、go(),加载history列表中的某一个具体页面;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>History对象</title>
</head>
<body>
<input type="button" id="btn" value="获取历史记录个数">
<script>
var btn = document.getElementById("btn");
btn.onclick = function () {
var length = history.length;
alert(length);
}
</script>
</body>
</html>
DOM,Document Object Model,文档对象模型,就是将标记语言文档的各个组成部分封装为对象,可以使用这些对象对标记语言文档进行CRUD操作。
W3C DOM 标准被分为3个不同的部分:
1)Document对象
创建:在html dom模型中,可以使用window对象来获取,window.document、document 方法:1、获取Element对象; getElement()方法,根据id属性值获取元素对象; getElementsByTagName()方法,根据元素名称获取元素对象们,返回值是一个数组; getElementsByClassName()方法,根据class属性值获取元素对象们,返回值是一个数组; getElementsByName()方法,根据name属性值获取元素对象们,返回值是一个数组;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document对象</title>
</head>
<body>
<div id="div1"> div1 </div>
<div id="div2"> div2 </div>
<div id="div3"> div3 </div>
<div class="class1"> div4 </div>
<div class="class1"> div5 </div>
<input type="text" name="username">
<script>
var divs = document.getElementsByTagName("div");
alert(divs.length); //5
var divs1 = document.getElementsByClassName("class1");
alert(divs1.length); //2
var divs2 = document.getElementsByName("username");
alert(divs2.length); //1
</script>
</body>
</html>
2、创建其他DOM对象方法: createAttribute(name) createComment() createElement() createTextNode()
2)Element对象
创建:通过document来创建/获取; 方法:1、removeAttribute(),删除属性; 2、setAttribute(),设置属性;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document对象</title>
</head>
<body>
<a> 点我一下 </a>
<input id="btn" type="button" value="设置a标签属性">
<input id="btn1" type="button" value="删除a标签属性">
<script>
btn = document.getElementById("btn");
btn.onclick = function () {
var ele = document.getElementsByTagName("a")[0];
ele.setAttribute("href","https://www.baidu.com");
}
btn1 = document.getElementById("btn1");
btn1.onclick = function () {
var ele = document.getElementsByTagName("a")[0];
ele.removeAttribute("href");
}
</script>
</body>
</html>
3)Node对象,是其他5个对象的父对象
特点:所有dom对象都可以被认为是一个节点; 方法:1、CRUD dom树: appendChild(),向节点的子节点列表的结尾添加新的子节点; removeChild(),删除(并返回)当前节点的指定子节点; replaceChild(),用新节点替换一个子节点; 2、setAttribute(),设置属性; 属性:parrentNode 返回节点的父节点
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Node对象</title>
<style>
div{
border: 1px solid red;
}
#div1{
width: 200px;
height: 200px;
}
#div2{
width: 100px;
height: 100px;
}
#div3{
width: 100px;
height: 100px;
}
</style>
</head>
<body>
<div id="div1">
<div id="div2"> div2 </div>
div1
</div>
<a id="del" href="javascript:void(0);"> 删除子节点</a>
<a id="add" href="javascript:void(0);"> 添加子节点</a>
<script>
var del = document.getElementById("del");
del.onclick = function () {
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
div1.removeChild(div2);
}
var add = document.getElementById("add");
add.onclick = function () {
var div1 = document.getElementById("div1");
var div3 = document.createElement("div");
div3.setAttribute("id","div3");
div1.appendChild(div3);
}
</script>
</body>
</html>
4)HTML DOM
1)添加表格的实现思路:
2)删除表格的实现思路:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态表格案例</title>
<style>
table{
border: 1px solid;
margin: auto;
width: 500px;
}
td,th{
text-align: center;
border: 1px solid;
}
div{
text-align: center;
margin: 50px;
}
</style>
</head>
<body>
<div>
<input type="text" id="id" placeholder="请输入编号">
<input type="text" id="name" placeholder="请输入姓名">
<input type="text" id="gender" placeholder="请输入性别">
<input type="button" id="btn_add" value="添加">
</div>
<table>
<caption>学生信息表</caption>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>操作</th>
</tr>
<tr>
</tr>
</table>
<script>
/*添加
* 1、给添加按钮绑定单击事件
* 2、获取文本框内容
* 3、创建td,设置td的文本为文本框的内容
* 4、创建tr,将td添加到tr中
* 5、获取table,将tr添加到table中
* 删除:
* 1、确定点击的是哪一个超链接
* 2、再删除
* */
document.getElementById("btn_add").onclick = function () {
var id = document.getElementById("id").value;
var name = document.getElementById("name").value;
var gender = document.getElementById("gender").value;
//创建td
var td_id = document.createElement("td");
var text_id = document.createTextNode(id);
td_id.appendChild(text_id);
var td_name = document.createElement("td");
var text_name = document.createTextNode(name);
td_name.appendChild(text_name);
var td_gender = document.createElement("td");
var text_gender = document.createTextNode(gender);
td_gender.appendChild(text_gender);
var td_a = document.createElement("td");
var ele_a = document.createElement("a");
ele_a.setAttribute("href","javascript:void(0);");
ele_a.setAttribute("onclick","del(this);")
var text_a = document.createTextNode("删除");
ele_a.appendChild(text_a);
td_a.appendChild(ele_a);
//创建tr
var tr = document.createElement("tr");
tr.appendChild(td_id);
tr.appendChild(td_name);
tr.appendChild(td_gender);
tr.appendChild(td_a);
//创建table
var table = document.getElementsByTagName("table")[0];
table.append(tr);
}
//删除方法
function del(obj) {
var table = obj.parentNode.parentNode.parentNode;
var tr = obj.parentNode.parentNode;
table.removeChild(tr);
}
</script>
</body>
</html>
以上的方式看起来效果不错,但是,各位看官别急,我们使用innerHTML的方式来实现,效果更佳,代码更精简:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态表格案例</title>
<style>
table{
border: 1px solid;
margin: auto;
width: 500px;
}
td,th{
text-align: center;
border: 1px solid;
}
div{
text-align: center;
margin: 50px;
}
</style>
</head>
<body>
<div>
<input type="text" id="id" placeholder="请输入编号">
<input type="text" id="name" placeholder="请输入姓名">
<input type="text" id="gender" placeholder="请输入性别">
<input type="button" id="btn_add" value="添加">
</div>
<table>
<caption>学生信息表</caption>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>操作</th>
</tr>
<tr>
</tr>
</table>
<script>
document.getElementById("btn_add").onclick = function () {
var id = document.getElementById("id").value;
var name = document.getElementById("name").value;
var gender = document.getElementById("gender").value;
//获取table
var table = document.getElementsByTagName("table")[0];
table.innerHTML += "<tr> " +
"<td> "+id+" </td>" +
"<td>"+name+"</td> " +
"<td>"+gender+"</td> " +
"<td><a href=\"javascript:void(0);\" onclick='del(this)'>删除</a></td>" +
"</tr>";
}
//删除方法
function del(obj) {
var table = obj.parentNode.parentNode.parentNode;
var tr = obj.parentNode.parentNode;
table.removeChild(tr);
}
</script>
</body>
</html>
本文为博主原创文章,转载请注明出处。