教案:转换课程第2章DOM编程
因为各种原因,本文中缺少部分内容,不便之处请原谅。 如有问题,请留言,并留下联系方式,我会尽快回复。 如果这个对你有用,请回贴以示支持,谢谢。 授课教师:牟勇 课时: 100 分钟 l 整章授课思路 l 本章重点 n 本章共有五个知识点: DOM , document 对
因为各种原因,本文中缺少部分内容,不便之处请原谅。
如有问题,请留言,并留下联系方式,我会尽快回复。
如果这个对你有用,请回贴以示支持,谢谢。
授课教师:牟勇
课时:100分钟
l 整章授课思路l 本章重点
n本章共有五个知识点:DOM,document对象,制作浮动广告窗口,制作全选特效,常见错误
nDOM可以从HTML标记树谈起,先介绍HTML标记树,节点等概念,之后引出:要动态改变HTML标记树,就需要使用DOM,之后介绍什么是DOM,最后介绍HTML的DOM模型。
ndocument对象:首先介绍document对象的两个DOM方法,需要补充说明的是,每一个树的节点都有对应的DOM方法,而我们介绍的两个document对象的DOM方法是每一个元素节点(也就是对应于html标记的节点)都有这两个DOM方法。
n简单介绍了document对象的DOM方法之后,通过两个特效来说明这两个方法的使用。
n最后说明常见错误。
n什么是DOM
ndocument对象的属性和方法
nCSS常用属性
l 本章难点
n会创建个性化的表格
n会创建个性化的表单
l 本章工作任务
u 制作浮动的广告图片特效
u 制作带关闭按钮的浮动窗口
u 制作全选/全不选特效
l 整章授课思路
n本章共有
n首先介绍转换课程的基本内容,目标。
n介绍本章目标:使用Eclipse平台开发Java程序,学会使用调试解决程序错误
n使用Eclipse平台开发Java程序:通过示例和练习,让学员熟悉Eclipse的基本操作。
n调试:通过一个生活案例引入调试的概念,然后教会学员单步调试,并学会观察变量的变化。
回顾: [5分钟]
CSS外部样式表有哪些引用方法?
A:hover是什么意思?
如果我要更改背景色,应使用哪个样式属性?
如果我要更改字体大小,应使用哪个样式属性?
如果我要将右边框粗细更改为1px,将左填充更改为0px,应该怎么写?
预习检查: [5分钟]
document对象有哪些常用方法?
bgcolor属性用来设置什么?
简要说明如何制作浮动的广告图片。
课程知识点讲解:
DOM-文档对象模型:[10分钟]
HTML的树状结构
如果我们分析常见的页面HTML源代码,我们会发现存在树状的文档结构。
其中,是最顶一层,我们称它为根节点,根节点是没有上级(也称为父节点)的节点,在它的下面有两个子节点:和,而是它们的父节点。由于和它们有共同的父节点,所以我们把这两个节点的关系称为兄弟节点。我们还会看到在这棵树的最底层有一些节点,它们没有子节点。这些节点我们把它们称为叶节点。
问题:发现这个规律对我们有什么用?
答案:由于HTML的内容是静态的,如果我们要操作这些元素,就必须首先准确找到这些元素。由于它们是一个树状结构,各自的位置是相对固定的,这一点就保证了我们可以准确的找到我们想要修改的元素。这个树状结构我们给它取了一个名称,叫DOM(Document Object Model)。
(出示示例:修改超链接)
什么是DOM
DOM-Document Object Model ,它是W3C国际组织的一套Web标准,它定义了访问HTML文档对象的一套属性、方法和事件 。
function changeLink() { document.getElementById('myAnchor').innerHTML="搜狐" ; document.getElementById('myAnchor').href="http://www.sohu.com" ; }
DOM改变链接">
教员应重点解释JavaScript函数中的getElementById()方法的意义,以及innerHTML属性和href属性的意义。
HTML的DOM对象模型
首先出示幻灯片上的浏览器图形,依次说明window对象,history对象,document对象,form对象的具体含义,给学员以形象的记忆点,之后告诉学员,由于存在这样一个层次结构,所以在我们引用某个HTML元素时,我们要按顺序一层一层的进行引用,例如我们要找到表单“myform”我们可以写做window.document.myform,强调书写格式:每个对象之间用“.”分隔。
之后出示幻灯片上的HTML DOM对象模型图,说明对象的名称,它们之间的层次关系。
document对象:[10分钟]
引入:认识了DOM的重要性,我们就来学习在HTML中最常用的一个对象:document对象的属性和方法吧
属性或方法 |
说明 |
bgColor |
背景颜色 |
getElementById() |
通过ID获得元素 |
getElementsByName() |
通过name属性获得一组元素 |
由于4.0中已经学过了document对象的属性和方法,所以,只需要简单介绍即可,重点强调getElementById()与getElementsByName()方法,它们的相同的地方就是都能获得HTML元素对象,不同的地方就是getElementById()方法是根据id来获得一个元素对象,而getElementsByName()方法是根据name来获得一组元素对象。
制作浮动的广告图片[20分钟]
引入:通过简单的学习,我们已经知道几个document重要的属性和方法,下面我们来具体运用一下它们,看看我们都能做些什么吧!
问题:如何在页面上方显示广告图片?如何控制图片的移动?
分析:使用DIV层,把图片放在层中,然后使用JavaScript控制层的位置坐标
实现思路:在页面中插入层,然后在层中插入图片。编写脚本,使用getElementById()方法获取层对象,然后根据鼠标滚动的距离移动层的位置。
常见页面的坐标介绍
top:左上角的y坐标。
pixelTop:左上角的y坐标,与top的区别仅在于:ixelTop是一个整数,所以可以直接参与算术运算,而top是一个字符串,不能直接参与算术运算。
scrollTop:滚动条滚动的距离。
关键代码:
var advInitTop=0; function inix( ){ x=document.getElementById("advLayer").style.pixelTop; } function move( ){ document.getElementById("advLayer").style.pixelTop= advInitTop+document.body.scrollTop; } window.onscroll=move ; //当页面滚动时调用move( )函数
…… onload="inix( )" > ……
教员应讲解关键代码(红色部分),重点说明函数的两种调用方式:HTML调用和JS调用(土红色部分)。
制作带关闭按钮的浮动窗口[20分钟]
引入:我们前面已经实现了一个可以随着滚动条跑的广告窗口,但这样的广告窗口有个缺点,就是当用户不想看到它的时候无法关闭它。
问题:如何实现带关闭功能的浮动窗口?
分析:做一个图片,再作一个层,把图片贴到这个层里面,用它来实现关闭(点击时隐藏层)。
实现思路:
1、使用getElementById( )方法获得层对象
2、设置层的样式style的显示属性display="none"
var advInitTop=0; function inix( ){ advInitTop=document.getElementById("advLayer").style.pixelTop; } function move( ){ document.getElementById("advLayer").style.pixelTop= advInitTop+document.body.scrollTop; } function closeMe( ){ document.getElementById("closeLayer").style.display="none"; document.getElementById("advLayer").style.display="none"; } window.onscroll=move ; //当页面滚动时调用move( )函数 onload="inix( )" > style="position:absolute;left:166px;top:132px;width:27px; height:19px;z-index:2;">
教员应强调隐藏层的代码(土红色部分)。
如果要隐藏,使用“none”字面量,如果要显示,使用“block”字面量。
下面是参考内容(这部分内容教员可以有选择性的与学员说明,不需要全部讲):
block : CSS1 块对象的默认值。用该值为对象之后添加新行
none : CSS1 隐藏对象。与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间
inline : CSS1 内联对象的默认值。用该值将从对象中删除行
compact : CSS2 分配对象为块对象或基于内容之上的内联对象
marker : CSS2 指定内容在容器对象之前或之后。要使用此参数,对象必须和:after及:before 伪元素一起使用
inline-table : CSS2 将表格显示为无前后换行的内联对象或内联容器
list-item : CSS1 将块对象指定为列表项目。并可以添加可选项目标志
run-in : CSS2 分配对象为块对象或基于内容之上的内联对象
table : CSS2 将对象作为块元素级的表格显示
table-caption : CSS2 将对象作为表格标题显示
table-cell : CSS2 将对象作为表格单元格显示
table-column : CSS2 将对象作为表格列显示
table-column-group : CSS2 将对象作为表格列组显示
table-header-group : CSS2 将对象作为表格标题组显示
table-footer-group : CSS2 将对象作为表格脚注组显示
table-row : CSS2 将对象作为表格行显示
table-row-group : CSS2 将对象作为表格行组显示
问题:上一张PPT中示例能实现关闭了,但关闭图片不能跟随滚动,怎么办?
分析:让关闭图标所在的层像浮动窗口一样,也跟随滚动条同步滚动。
var advInitTop=0; var closeInitTop=0; function inix( ){ advInitTop=document.getElementById("advLayer").style.pixelTop;closeInitTop=document.getElementById("closeLayer").style.pixelTop; } function move( ){ document.getElementById("advLayer").style.pixelTop= advInitTop+document.body.scrollTop ; document.getElementById("closeLayer").style.pixelTop= closeInitTop+document.body.scrollTop ; } function closeMe( ) { document.getElementById("closeLayer").style.display="none"; document.getElementById("advLayer").style.display="none"; } window.onscroll=move ; //窗口的滚动事件
在原来的基础上再添加一句代码就可以了(土红色部分)。教员可以让学员到老师机上来添加这一句代码,以加强学员对getElementById()方法的使用。
小结1:制作右边栏浮动的带关闭按钮的广告图片
教员提供练习代码(幻灯片上的超链接已提供了练习代码的链接),学员完成代码填空。
制作实现全选效果[20分钟]
引入:制作浮动广告图片到此告一段落。在网页上,我们还会常常看到如下的情况。
如何给那些复选框提供全选和全不选的功能呢?
这要解决如下2个问题:
1、复选框是否选中的属性是哪个?
答案:checked
2、写代码逐个复选框设置为true,有没有更好的办法?
答案:让所有需要选中的复选框为同一个名字,让它们成为一个数组,然后使用循环解决问题。
实现思路:
1.创建一组同名复选框
2、使用getElementsByName( )方法获得一组同名的复选框对象。
3、通过循环来改变复选框是否被选中属性checked的值。
function checkAll(boolValue ) { var allCheckBoxs=document.getElementsByName("isBuy") ; for (var i=0;iallCheckBoxs.length ;i++) { if(allCheckBoxs[i].type=="checkbox") allCheckBoxs[i].checked=boolValue ; } }
…… height="18"> ……
href="javascript: checkAll(true)">全选
全不选
教员解释关键代码(红色部分),可以提醒学员:循环中的if语句是否必须?(这个if是为了预留退路的代码,避免将来HTML网页进行修改时别的元素使用了相同name的情况),href=;javascript:的意思(href=javascript:的意思是让原来的超链接失效,使得在我们点击一个超链接时不是跳转到另一个页面,而是执行一个javascript函数,javascript:仅用于href属性)
小结2:编写如图所示,通过全选/全不选前面加个复选框来实现全选/全不选切换的效果。
教员提供练习代码(幻灯片上有超链接),由学员进行代码填空
常见错误[5分钟]
常见错误1:
language="javascript"> function checkAll(boolValue ) { alert("OK"); var allCheckBoxs=document.getElementsByName("isBuy") ; alert(allCheckBoxs[0].type); for (var i=0;i { if(allCheckBoxs[i].type="checkbox") allCheckBoxs[i].checked=boolValue ; } }
应使用==,而不是=。
function checkAll(boolValue ) { var allCheckBoxs=document.getElementsByName("isBuy") ; for (var i=0;i { if(allCheckBoxs[i].type=="checkbox") allCheckBoxs[i].checked=boolValue ; } }
……
‘true’和true的含义是不一样的(true是逻辑常量,而’true’是字符串)。
本章总结 [10分钟]
请介绍Document对象的常用属性?
请详细解释Document对象的常用方法?
请简述制作带关闭按钮的浮动窗口实现思路?
请简要回答如何制作全选/全不选复选框效果?
考核点
DOM的概念
getElementById()的使用
getElementsByName()的使用