Creative Juices Bo. Co.

Satisfy Your Thirst For Something Refreshing!

A Nice Book On Learning JavaScript

Beginning Javascript with DOM Scripting and AJAX

In my lifetime I can honestly say that I have only bought two books on JavaScript programming. The first one was called "Special Edition: Using JavaScript" [Que-1996]. This was basically a reference book that described, and provided an example of, every function and method in JavaScript at that time. I don't think I have opened this book in about 8 years.

During this time, I have relied heavily on Google to provide information on any new tips and tricks that have come out. If I came across something that intrigued me, I would spend countless hours learning all I could from the internet.

Recently I purchased a new book called "Beginning Javascript with DOM Scripting and AJAX" [Apress-2006]. I primarily bought this to enhance my knowledge of DOM programming, but it also enlightened me to some new techniques that I've seen, but I really never fully understood.

So, if you need a refresher course or if you are just starting out in JavaScript programming, I highly recommend checking this out. It's well written and very easy to understand. The author provides a lot of code samples, which you can download from his site.

The one thing I would like to point out, is that he provides a few DOM functions in a DOM Utility Script. These functions are called: lastSibling, firstSibling and closestSibling. These are extremely useful, but I don't like how he's returning the value.

Here are the functions:

var DOMhelp={



   lastSibling:function(node){

      var tempObj=node.parentNode.lastChild;

      while(tempObj.nodeType!=1 && tempObj.previousSibling!=null){

         tempObj=tempObj.previousSibling;

      }

      return (tempObj.nodeType==1)?tempObj:false;

   },



   firstSibling:function(node){

      var tempObj=node.parentNode.firstChild;

      while(tempObj.nodeType!=1 && tempObj.nextSibling!=null){

         tempObj=tempObj.nextSibling;

      }

      return (tempObj.nodeType==1)?tempObj:false;

   },



   closestSibling:function(node,direction){

      var tempObj;

      if(direction==-1 && node.previousSibling!=null){

         tempObj=node.previousSibling;

         while(tempObj.nodeType!=1 && tempObj.previousSibling!=null){

             tempObj=tempObj.previousSibling;

         }

      }else if(direction==1 && node.nextSibling!=null){

         tempObj=node.nextSibling;

         while(tempObj.nodeType!=1 && tempObj.nextSibling!=null){

             tempObj=tempObj.nextSibling;

         }

      }

      return tempObj.nodeType==1?tempObj:false;

   }

   

}

I have a problem with the way he's returning the values:

return tempObj.nodeType == 1 ? tempObj: false;

What I don't like about this method is that he doesn't test to see if the tempObj is a valid object. Also, he's returning false. I don't think that this follows the standard form in which javascript returns results for objects. I think it should return "undefined" if it's not a valid DOM object. So, here's what I recommend changing the return value to:

return (tempObj && tempObj.nodeType == 1) ? tempObj: "undefined";

Still the book is a good read and his other examples are very nice. Check it out and let me know what you think.