第二章 JavaScript操作BOM对象

1、目标

  1. 会使用getElementById方法访问DOM元素
  2. 会使用getElementByName访问DOM元素
  3. 会使用getElementsByTagName方法访问DOM元素
  4. 会使用定时函数和Data对象制作时钟特效

2、 BOM

2.1 BOM模型

BOM:浏览器对象模型(Browser Object Model

BOM 是 Browser Object Model,浏览器对象模型BOM 是为了控制浏览器的行为而出现的接口

对于JavaScript:为了能够让JavaScript能控制浏览器的行为JavaScript就有了一套自己的BOM接口

BOM提供了独立于内容的、可以与浏览器窗口进行交互的对象结构

BOM可以实现功能

弹出新的浏览器窗口

移动、关闭浏览器窗口以及调整窗口的大小

页面的前进、后退

2.2 window对象

常用属性

属性名称

说 明

history

有关客户访问过的URL的信息

location

有关当前 URL 的信息

语法

window.属性名 = "属性值";
//示例
window.location = 'http://www.baidu.com' //实现页面跳转
常用方法

方法名称

说 明

prompt( )

显示可提示用户输入的对话框

alert( )

显示带有一个提示信息和一个确定按钮的警示框

confirm( )

显示一个带有提示信息、确定和取消按钮的对话框

close( )

关闭浏览器窗口

open( )

打开一个新的浏览器窗口,加载给定 URL 所指定的文档

setTimeout( )

在指定的毫秒数后调用函数或计算表达式

setInterval( )

按照指定的周期(以毫秒计)来调用函数或表达式

confirm() 方法

confirm() 将弹出一个确认对话框

语法

confirm("对话框中显示的纯文本")

<script type="text/javascript">
   var flag=confirm("确认要删除此条信息吗?");
    if(flag==true)
	      alert("删除成功!");
      else
	       alert("你取消了删除");
</script>

confirm()与alert()、prompt() 区别

alert():一个参数,仅显示警告对话框的信息,无返回值、不能对脚本产生任何改变

prompt() : 两个参数,输入对话框,用来提示用户输入一些信息,单机取消按钮则返回null,单击确定按钮则返回用户输入的值,常用于收集关于特定问题而反馈的信息

confirm() : 一个参数,确认对话框,显示提示对话框的信息,"确认"按钮和取消按钮,单击确认则返回true,单击取消按钮返回false,因此与if-else语句搭配使用

<script type="text/javascript">
    //alert
    alert("你好!!!")

    //prompt
    var r = prompt("你好!请输入信息:","默认信息")
    document.write("我是prompt的返回值" + r)
    //confirm
    var a = confirm("请确认输入信息是否有误")
    if(a){
        document.write("没有错误哦!")
    }else{
        document.write("有错误");
    }
</script>
open() 方法

window.open("弹出窗口的url","窗口名称","窗口特征")

属性名称

说 明

height、width

窗口文档显示区的高度、宽度。以像素计

left、top

窗口的x坐标、y坐标以像素计

toolbar=yes | no |1 | 0

是否显示浏览器的工具栏。黙认是yes

scrollbars=yes | no |1 | 0

是否显示滚动条。黙认是yes

location=yes | no |1 | 0

是否显示地址地段。黙认是yes

status=yes | no |1 | 0

是否添加状态栏。黙认是yes

menubar=yes | no |1 | 0

是否显示菜单栏。黙认是yes

resizable=yes | no |1 | 0

窗口是否可调节尺寸。黙认是yes

titlebar=yes | no |1 | 0

是否显示标题栏。黙认是yes

fullscreen=yes | no |1 | 0

是否使用全屏模式显示浏览器。黙认是no。处于全屏模式的窗口必须同时处于剧院模式

<script type="text/javascript">
    window.open("https://mmjon.github.io","百度","width:200px;height:200px")

</script>
history对象
常用方法

名称

说 明

back()

加载 history 对象列表中的前一个URL

forward()

加载 history 对象列表中的下一个URL

go()

加载 history 对象列表中的某个具体URL

location对象
常用属性

名称

说 明

host

设置或返回主机名和当前URL的端口号

hostname

设置或返回当前URL的主机名

href

设置或返回完整的URL

常用方法

名称

说 明

reload()

重新加载当前文档

replace()

用新的文档替换当前文档

location和history对象的应用

主页面使用href实现跳转和刷新本页

//主页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>我是主页面</h1>
    <a href="javascript:location.href='flower.html'">查看鲜花详情</a>  

</body>
</html>


//鲜花页面
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>我是flower页面</h1>
    <a href="javascript:location.reload()">刷新本页</a>
    <a href="javascript:history.back()">返回主页面</a>
</body>
</html>
Document对象
常用属性

名称

说 明

referrer

返回载入当前文档的URL

URL

返回当前文档的URL

document.referrer
document.url

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    当前页面:
</body>
<script type="text/javascript">
//如果当前文档不是通过超级链接访问的,则为 null。
//这个属性允许客户端 JavaScript 访问 HTTP 引用头部。
//这里我们直接运行是不会显示内容的,当我们重新ctrl+s文件的时候才会显示   Live Server模式中
    document.write(document.referrer)
//URL 属性可返回当前文档的 URL。  直接显示
document.write(document.URL)
</script>
</html>
  1. 判断页面是否是连接进入
  2. 自动跳转到登陆页面

award.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script type="text/javascript">
    var preUrl=document.referrer;  //载入本页面文档的地址
if(preUrl==""){	
      document.write("<h2>您不是从领奖页面进入,5秒后将自动 跳转到主页面</h2>");
      setTimeout("javascript:location.href='yemian.html'",5000);
}

</script>
</html>

yemian.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <a href="./award.html">领奖</a>
</body>
</html>
常用方法

名称

说 明

getElementById()

返回对拥有指定id的第一个对象的引用

getElementsByName()

返回带有指定名称的对象的集合

getElementsByTagName()

返回带有指定标签名的对象的集合

write()

向文档写文本、HTML表达式或JavaScript代码

动态改变层、标签中的内容

访问相同name的元素

访问相同标签的元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    姓名:<span id="name">张三</span>
    <button onclick="update()">修改名字</button>

    <span name="number">123</span>
    <span name="number">456</span>
    <span name="number">789</span>
    <button onclick="visit()">number</button>
    <button onclick="visittag()">Tag</button>
    <span name="replace"> </span>
</body>
<script type="text/javascript">

    //修改名字
    function update(){
        document.getElementById("name").innerHTML="李四";
    }

    //访问相同name的元素
    function visit(){
        var list = document.getElementsByName("number");
        var str = "";

        for(var i = 0; i < list.length;i++){
            str += list[i].textContent +" ";
        }
        // document.write(str)
        document.getElementsByName("replace")[0].textContent=str
    }
    //访问相同标签的元素
    function visittag(){
        var list = document.getElementsByTagName("span");
        var str = "";
        for(var i = 0; i < list.length;i++){
            str += list[i].textContent +" ";
        }
        document.getElementsByName("replace")[0].textContent=str
    }
</script>
</html>

3、JavaScript内置对象

Array:用于再单独的变量名中存储一系列的值

String:用于支持对字符串的处理

Math:用于执行常用的数学任务,它包含了若干个数字常量和函数

Date:用于操作日期和时间

Date对象

语法
var 日期对象 = new Date(参数)
参数格式: MM DD,YYYY,hh:mm:ss
例如:
var  today=new Date();   //返回当前日期和时间
var tdate=new Date("september 1,2013,14:58:12");
常用方法

方法

说 明

getDate()

返回 Date 对象的一个月中的每一天,其值介于131之间

getDay()

返回 Date 对象的星期中的每一天,其值介于06之间

getHours()

返回 Date 对象的小时数,其值介于023之间

getMinutes()

返回 Date 对象的分钟数,其值介于059之间

getSeconds()

返回 Date 对象的秒数,其值介于059之间

getMonth()

返回 Date 对象的月份,其值介于011之间

getFullYear()

返回 Date 对象的年份,其值为4位数

getTime()

返回自某一时刻(197011日)以来的毫秒数

制作时钟特效

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="clock"></div>
</body>
<script>
    function clock(){
        var now = new Date();
        var ss = now.getSeconds();
        var mm = now.getMinutes();
        var hh = now.getHours();

        document.getElementById("clock").innerHTML = hh + ":" + mm +":" + ss
    }
    clock();
</script>
</html>

Math对象

常用方法

方法

说 明

示例

ceil()

对数进行上舍入

Math.ceil(25.5);返回26

Math.ceil(-25.5);返回-25

floor()

对数进行下舍入

Math.floor(25.5);返回25

Math.floor(-25.5);返回-26

round()

把数四舍五入为最接近的数

Math.round(25.5);返回26

Math.round(-25.5);返回-26

random()

返回0~1之间的随机数

Math.random();例如:0.6273608814137365

实现返回2-99的整数范围
var iNum=Math.floor(Math.random()*98+2);
随机选择颜色
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="">
        <span >本次选择的颜色是: </span>
        <span id = "wz"></span>
        <button onclick="cc()">点击查看</button>
    </div>
</body>
<script>
function cc(){
    var array = new Array("红色","黄色","白色","蓝色")
    var num = Math.ceil(Math.random()*4)-1
    document.getElementById("wz").innerHTML = array[num]
}
</script>
</html>

定时函数

setTimeout()
语法
setTimeout("调用的函数",等待的毫秒数)
使用
var  myTime=setTimeout("disptime() ", 1000 );
setInterval()
语法
setInterval("调用的函数",间隔的毫秒数)
使用
var  myTime=setInterval("disptime() ", 1000 );

如果要多次调用,使用setInterval()或者让disptime()自身再次调用setTimeout()

清除函数

clearTimeout()
语法
clearTimeout(setTimeOut()返回的ID值)
使用
var  myTime=setTimeout("disptime() ", 1000 );
clearTimeout(myTime);
clearInterval ()
语法
clearInterval(setInterval()返回的ID值)
使用
var  myTime=setInterval("disptime() ", 1000 );
clearInterval(myTime);

练习

练习一、制作简易的当当购物车页面

Shopping

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>制作简易的当当购物车页面</title>
    <link type="text/css" rel="stylesheet" href="css/cartStyle.css" />
</head>
<script src="./js/shopping.js"></script>
<body>
<div class="content">
    <div class="logo">
        <img src="images/dd_logo.jpg"><span onclick="pagedown()">关闭</span>
    </div>
    <div class="cartList">
        <ul>
            <li onclick="collect()">移入收藏</li>
            <li onclick="del()">删除</li>
            <li onclick="collect()">移入收藏</li>
            <li onclick="del()">删除</li>
            <li><span onclick="pay()">结 算</span></li>
        </ul>
    </div>
</div>
</body>
</html>

js

//关闭
function pagedown(){
    window.close();
}

//收藏
function collect(){    
    if(confirm("请确认是否收藏")){
        alert("收藏成功")
    }else{
        alert("取消收藏")
    }
}

//删除
function del(){
    if(confirm("请确认是否删除")){
        alert("删除成功")
    }else{
        alert("取消删除")
    }
}

//结算
function pay(){
    if(confirm("请确认是否结算")){
        window.open("","结算页面","width:50px;height:100px;")
    }else{
        alert("取消删除")
    }
}

练习二、查看一年四季变化

这里只展示春天和主页面

spring.html

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
<title>春</title>
<style type="text/css">
body{margin:0;}
img{
	border:0;
	padding:5px;    
	}
td{
	font-size:14px;
	line-height:20px;
	}
</style>

</head>

<body><table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><img src="images/spring.jpg" alt="春天" /></td>
    <td>春来――爆竹声中一岁除,春风送暖入屠苏<br />
      春雨――小楼一夜听春雨,深巷明朝卖杏花<br />
      春花――惆怅东栏一株雪,人生看得几清明<br />
      春风――春风又绿江南岸,明月何时照我还<br />
      春光――等闲识得东风面,万紫千红总是春<br />
      春景――试上超然台上看,半壕春水一城花<br />
      春游――东风知我欲山,吹断檐间积雨声 <br />
      春思――春心莫共花争发,一寸相思一寸灰<br />
      春寂――春潮带雨晚来急,野渡无人舟自横<br />
      春愁――问君能有几多愁,恰似一江春水向东流<br />
      春梦――枕上片时春梦中,行尽江南数千里<br />
      春恨――人生自是有情痴,此恨不关风和月<br />
      春归――落红不是无情物,化作春泥更护花<br />
    <a href="javascript:location.href='./summer.html'">夏天</a> <a href="javascript:location.href='./autumn.html'">秋天</a> <a href="javascript:location.href='./winter.html'">冬天</a>  <a href="javascript:history.go(-1)">后退</a>   <a href="javascript:history.go(1)">前进</a></td>
  </tr>
</table>

</body>
</html>

index.html

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
<title>查看一年四季的变化</title>
<style type="text/css">
table{
	margin-top: 0px;
	margin-right: auto;
	margin-bottom: 0px;
	margin-left: auto;
	border-top:1px #cccccc solid;
	border-left:1px #cccccc solid;
	width:400px;
	}
img{
	border:0;
	padding:5px;    
	}
td{
	font-size:14px;
	line-height:25px;
	text-align:center;
	border-bottom:1px #cccccc solid;
	border-right:1px #cccccc solid;
	}
</style>
</head>

<body><table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><img src="images/1.jpg" /></td>
    <td><img src="images/2.jpg" /></td>
  </tr>
  <tr>
    <td><a href="javascript:location.href='./spring.html'">春</a></td>
    <td><a href="javascript:location.href='./summer.html'">夏</a></td>
  </tr>
  <tr>
    <td><img src="images/3.jpg" /></td>
    <td><img src="images/4.jpg" /></td>
  </tr>
  <tr>
    <td><a href="javascript:location.href='./autumn.html'">秋</a></td>
    <td><a href="javascript:location.href='./winter.html'">冬</a></td>
  </tr>
  <tr>
    <td colspan="2"><a href="javascript:location.reload()">刷新本页</a></td>
  </tr>
</table>

</body>
</html>

练习三:完善当当购物车页面

需求说明在练习1的基础上完善当当购物车页面计算商品总计

shopping.js

var alist = document.getElementsByName('amount');
//关闭页面
function close_plan(){
    window.close();
}
function del(){
    if(confirm("请确认是否删除")){
        alert("删除成功")
    }else{
        alert("取消删除")
    }
}
function collection(){
    if(confirm("请确认是否收藏")){
        alert("收藏成功")
    }else{
        alert("取消收藏")
    }
}
//数量加
function plus(num) {
    alist[num].value = parseInt(alist[num].value) + 1;
}

//数量减
function minus(num) {
    alist[num].value = parseInt(alist[num].value) - 1;
}
//计算总价
document.addEventListener("DOMContentLoaded", function () {
    var totalPrice = document.getElementById("totalPrice");
    var plist = document.getElementsByName('price');
    var alist = document.getElementsByName('amount');
    var mlist = document.getElementsByName('minus');
    var addlist = document.getElementsByName('plus');
    function sum() {
        var total = 0;
        for (var i = 0; i < plist.length; i++) {
            //设置数量不能为为空或小于0
            if (alist[i].value == '' || alist[i].value < 0) {
                alist[i].value = 0;
            }
            total += parseFloat(plist[i].value) * parseInt(alist[i].value);
            // alert(total)
        }
        totalPrice.innerHTML = total.toFixed(2)
    }
    for (var i = 0; i < plist.length; i++) {
        plist[i].addEventListener("input", sum)
        alist[i].addEventListener("input", sum)
        mlist[i].addEventListener("click", sum)
        addlist[i].addEventListener("click", sum)
    }
    sum()
});

//支付
function accounts(){
    var total = document.getElementById('totalPrice').textContent;
    if(confirm("总价:" + total + ",请打开支付宝进行支付")){
        window.open("","结算页面","width:50px;height:100px;")
    }else{
        alert("取消删除")
    }
}

shopping.html

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>访问当当购物车页面节点</title>
    <link type="text/css" rel="stylesheet" href="css/cartStyle.css" />
</head>
<body>
<script src="./js/shopping.js"></script>
<div class="content">
    <div class="logo">
        <img src="images/dd_logo.jpg"><span onclick="close_plan();">关闭</span>
    </div>
    <div class="cartList" id="cartList">
        <ul>
            <li>¥<input type="text" name="price" value="21.90"></li>
            <li><input type="button" name="minus" value="-" onclick="minus(0);"><input type="text" name="amount" value="1"><input type="button" name="plus" value="+" onclick="plus(0);"></li>
            <li id="price0">¥21.90</li>
            <li><p  onclick="collection();">移入收藏</p><p onclick="del();">删除</p></li>
        </ul>
        <ul>
            <li>¥<input type="text" name="price" value="24.00"></li>
            <li><input type="button" name="minus" value="-" onclick="minus(1);"><input type="text" name="amount" value="1"><input type="button" name="plus" value="+" onclick="plus(1);"></li>
            <li id="price1">¥24.00</li>
            <li><p  onclick="collection();">移入收藏</p><p onclick="del();">删除</p></li>
        </ul>
        <ol>
            <li id="totalPrice">&nbsp;</li>
            <li><span onclick="accounts();">结 算</span></li>
        </ol>
    </div>
    <div></div>
</div>
</body>
</html>

练习四、制作12进制的时钟特效

训练要点Date对象的使用setInterval( )方法的使用需求说明制作显示年、月、日、星期几,并且显示上午(AM)和下午(PM)的十二进制的时钟

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="clock"></div>
</body>
<script>
    function cc(){
        var now = new Date();
        var YY = now.getFullYear();
        var MM = now.getMonth() + 1;
        var dd = now.getDate();
        var hh = now.getHours();
        var mm = now.getMinutes();
        var ss = now.getSeconds();
        var apm = hh>12 ? "pm":"am";
        var hh = hh%12;
        var hh = hh ? hh:12;
        var hh = hh<10 ? "0" + hh : hh;
        var mm = mm<10 ? "0" + mm : mm;
        var ss = ss<10 ? "0" + ss : ss;
        var dd = dd<10 ? "0" + dd : dd;
        var MM = MM<10 ? "0" + MM : MM;

        var week = now.getDay();
        switch(week){
            case 1: week = "星期一";break;
            case 2: week = "星期二";break;
            case 3: week = "星期三";break;
            case 4: week = "星期四";break;
            case 5: week = "星期五";break;
            case 6: week = "星期六";break;
            case 7: week = "星期七";break;

        }

        document.getElementById("clock").textContent = "当前时间是:" + YY +"年"+ MM +"月"+ dd +"日   "+ hh +":"+ mm +":"+ ss + "  " +apm + "   " + week;
    }
    setInterval(cc,1000);
    window.onload = cc;
</script>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值