《Javascript入门学习全集》 Javascript学习第二季(实战3)

Javascript学习第二季(实战3

 

上章的例子虽然实现了功能,但毕竟不符合标准。

今天我们来优化 javascript 图片馆。

 

思路:

1 为了消除我们的假设,我们可以这么做:

 if (!document.getElementById) return false;

 if (!document.getElementById("imagegallery")) return false;

2,为了符合标准,我们可以必须把htmljs分离。

 首先得用js方法获取html的节点,然后来做相应的操作。

 

Demo1:

3C//DTD XHTML 1.1//EN"

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

 

 

 

 

        

 

 

 

Snapshots

 

 

     

       

  •  

          Fireworks

       

       

  •  

          Coffee

       

       

  •  

          Rose

       

       

  •  

          Big Ben

       

     

 

 "my

 

Choose an image.

 

 

 

 

现在我们来解析每句的含义:

首先我们把眼光放在prepareGallery()函数里:

if (!document.getElementsByTagName) return false;

 // 为保证向后兼容:我们判断document.getElementsByTagName是否可以用。

 if (!document.getElementById) return false;

 //同上

 if (!document.getElementById("imagegallery")) return false;

 //判断 imagegallery 是否存在,如果存在 获取。

 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);//this指向 links[i]

         }

      links[i].onkeypress = links[i].onclick;

          //当超链接获取焦点的时候,按任意键,触发onclick事件

          //注意:当获取焦点的时候,回车,会触发onclick事件。

 }

 

然后我们再来看showPic()函数:

function showPic(whichpic) {

 if (!document.getElementById("placeholder")) return true;

 //判断 id placeholder 对象是否存在。

 //如果 placeholder 不存在 ,则返回true 页面跳转

 //如果返回false,页面不跳转。按照需求,当不存在的时候,我们应该返回true

 // 也就是跳转。

 

 var source = whichpic.getAttribute("href");

 var placeholder = document.getElementById("placeholder");

 placeholder.setAttribute("src",source);

 

 if (!document.getElementById("description")) return false; //判断 id description 对象是否存在。

 

 if (whichpic.getAttribute("title")) {//判断 id description 属性 title 是否存在。

    var text = whichpic.getAttribute("title");

 } else {

    var text = "";

 }

 

 var description = document.getElementById("description");

 if (description.firstChild.nodeType == 3) { //nodeType=3 说明节点是文本节点。

    description.firstChild.nodeValue = text;

 }

 return false;

}

 

这个例子相对前章的例子,做了不少的优化。其实不能说是优化,应该说是改进。

增加了很多判断,相信有部分js程序员都没做过这么多 必要的判断。^_^

 

当然我们这个例子,也分离了htmljs  可以说接近标准了。

 

写成这样也就可以放到网站上了。

当然老外是比较追求完美的,明天我们再来看看 例子 的再次 改进。

 

看懂,并不代表你能把代码写出来。写出来,并不能代表你写的代码就很完美。

希望大家多练习,多写例子。 修行靠自己…..

 

如果还有不懂,可以google 搜索资料.

或者联系我 ,可以去我的blog 给我留言 :

http://www.cssrain.cn/LoadMod.asp?plugins=GuestBookForPJBlog

posted on 2008-08-13 13:33  草原和大树  阅读(361)  评论(1编辑  收藏  举报