整本书都是关于如何利用好DOM来进行相应的编程,总的来说,DOM的意识确实加强了,不过最深的还是书中利用DOM来编写的图片滑动的两个例子,一个是第六章,另一个是第十章。具体代码见【下载地址】
第六章要点分析:
HTML页面
首先在HTML页面一个<ul>多个li标签</ul>其中<li></li>的标签具体样式如下,给<ul>设置id是为了在js内获得ul的相应属性
<pre name="code" class="html"> <ul id="imagegallery">
<li></li>
.....
<li>
<a href="images/bigben.jpg" title="The famous clock">
<img src="images/thumbnail_bigben.jpg" alt="Big Ben" />
</a>
</li>
</ul>
然后在<ul></ul>结束后加上一个占位标签,就是一开始的时候要有张图片占有具体大小的位置,然后点击<li>标签内的图片时,图片变化实在下面方框中进行变化的
<img id="placeholder" src="images/placeholder.gif" alt="my image gallery" />
<p id="description">Choose an image.</p>
<p>标签只是在图片滑动时相应的显示<li>中图片的<title>中的内容
JS代码
通过js DOM来获得html页面中相应标签的属性,然后修改该标签的属性(我觉得整本书就是在讲这个,哦还有就是通过DOM添加一些标签,再为该标签添加属性)
以下是JS的完整代码
function showPic(whichpic) {
if (!document.getElementById("placeholder")) return true;
var source = whichpic.getAttribute("href");
var placeholder = document.getElementById("placeholder");
placeholder.setAttribute("src",source);
if (!document.getElementById("description")) return false;
if (whichpic.getAttribute("title")) {
var text = whichpic.getAttribute("title");
} else {
var text = "";
}
var description = document.getElementById("description");
if (description.firstChild.nodeType == 3) {
description.firstChild.nodeValue = text;
}
return false;
}
function prepareGallery() {
if (!document.getElementsByTagName) return false;
if (!document.getElementById) return false;
if (!document.getElementById("imagegallery")) return false;
var gallery = document.getElementById("imagegallery");
var links = gallery.getElementsByTagName("a");
for ( var i=0; i < links.length; i++) {
links[i].onclick = function() {
return showPic(this);
}
links[i].onkeypress = links[i].onclick;
}
}
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
addLoadEvent(prepareGallery);
一个函数一个函数来讲吧
首先是showPic(whichpic)
该函数是通过var source = whichpic.getAttribute("href");来获得当前对象的href属性
getAttribute("**")是获得当前对象的**属性。
再通过新建变量placeholder来获得id为placeholder的src属性,再将placeholder中的src更改为所选中图片的href;
placeholder.setAttribute("src",source)
setAttribute("**",#)是将#的属性替换掉**的属性。
其中有个description.firstChild.nodeType == 3
这里做个说明
nodeType
nodeType 属性可返回节点的类型。
最重要的节点类型是:
元素类型 | 节点类型 |
---|---|
元素element | 1 |
属性attr | 2 |
文本text | 3 |
注释comments | 8 |
文档document | 9 |
注意结尾的return false;这个函数不返回任何值,故要加上。
接着是第二个prepareGallery()函数,开始的三个if语句是检验当前浏览器是否支持该DOM,不支持则返回false,
通过新建links变量来获得<li>标签中的<a>的属性,当点击<a>中图像时调用showpic(whichpic)函数,更换占位处的图片链接,从而达到占位处图片更换的
作用。
其中links[i].onkeypress = links[i].onclick;的作用是让用户在使用键盘敲击时达到和鼠标点击一样的效果。
然后是第三个函数是页面加载时启动函数,不直接用window.onload是该函数在调用的时候更方便,直接addLoadEvent(prepareGallery);即可。