Very simple JS tab script

Moin Moin, actually I needed a simple tab script for a page with tabbed navigation. Because coding is fun I decided to write my own, very simple tab script. In this case I used prototype. The whole thing is for a little picture gallery which you can see here: http://www.woodheads.de/docs/picsframe.html. This is a page from my friends of my hometown in southern Germany. My job is to extend the existing code. There are two div areas marked with a id. The name of the id starts with page_ as an identifier. prototype has a nice method to get all elements with a special attribute. In this case I grab the div elements having a id with $$(‘div[id]’). That makes it possible to iterate over the grabed div’s and handle only the needed objects - choosen with a simple regex. This is the basic HTML structure:

<span onclick="Pics.change_page('lutterhaus')">Lutterhaus</span> | 
<span onclick="Pics.change_page('plankstadt')">Plankstadt</span>

<div id="page_plankstadt" style="display:none">
  <div id="pic_gallery">
    <div class="pics">
      <img id="1" onclick="Pics.show_pic(this.id,'pla');" src="/img/1_th.jpg" alt="#" /><br />
      <img id="2" onclick="Pics.show_pic(this.id,'pla');" src="/img/2_th.jpg" alt="#" /><br />
    </div>
    <div style="float:left;" id="pla" class="big_pic"><img src="/images/1.jpg" /></div>
    <div class="pics">
      <img id="3" onclick="Pics.show_pic(this.id,'pla');"src="/img/5_th.jpg" alt="#" /><br />
      <img id="4" onclick="Pics.show_pic(this.id,'pla');"src="/img/6_th.jpg" alt="#" /><br />
    </div>
    <div style="clear:both"></div>
  </div>
</div>

<div id="page_lutterhaus" style="display:none">
  <div id="pic_gallery">
    <div class="pics">
      <img id="5" onclick="Pics.show_pic(this.id,'pla');" src="/img/5_th.jpg" alt="#" /><br />
      <img id="6" onclick="Pics.show_pic(this.id,'pla');" src="/img/6_th.jpg" alt="#" /><br />
    </div>
    <div style="float:left;" id="lutt" class="big_pic"><img src="/images/1.jpg" /></div>
    <div class="pics">
      <img id="7" onclick="Pics.show_pic(this.id,'pla');"src="/img/7_th.jpg" alt="#" /><br />
      <img id="8" onclick="Pics.show_pic(this.id,'pla');"src="/img/8_th.jpg" alt="#" /><br />
    </div>
    <div style="clear:both"></div>
  </div>
</div>
And here the JavaScript code:
<script language="javascript">
  var Pics = {
    show_pic: function(id,area) {
      $(area).innerHTML = '<img src="/images/' + id + '.jpg" />';
    },
    change_page: function(show) {
      // get the div elements with attribute id
      var elem = $$('div[id]');
      
      // iterate over the div elements			
      for(i = 0; i < elem.length; i++) {
        // id does not match page_
        if(!elem[i].id.match(/^page_/)) continue;
        // we ignore the page to be choosen
	if(elem[i].id == 'page_' + show) continue;
	
	// all matched elements will be hidden
	elem[i].style.display = 'none';
      }
      
      // only the page we want to see is set to display
      $('page_' +  show).style.display = 'block';
    }
  }
</script>
I think this is quiet simple and very lightweight. For sure scriptaculous and jQuery (yes - and many other librarys) offer ready to go solutions for tabbed pages. But sometimes you just need a minimum of what these librarys can do and it’s faster to write it by yourself. Extending this for your needs hould be more than simple. Andreas

Posted Sunday, July 5th, at 12:00 AM (∞).

Powered by Tumblr; themed by Adam Lloyd.