选项卡技术很常见,即使刚踏入前端开发的同学都会使用它去完成一些基本的任务。有一种情况值的考虑,假如在一个页面中多处出现同样的功能模块的应用,那么我们很自然的会想到,把这个功能写成一个function,然后用一个事件来驱动这个function,这个的思路看上去一切都没什么问题了,既体现的代码的重用和模块化,又可以很快的完成繁琐的工作任务。
事实上,这样处理确实带来很多的便利性,但是美中不足的地方在于,在每个操作对象上都要加上事件属性(onclick=”",onmouseover=”"等等),否则一经写好的function就无法奏效,在推尚结构和表现向分离(实际上是xhtml+css技术,用在此处颇有不妥)的今天,这样的结构是遭人唾弃的(起码我很BS), 问题的出现总会有完美的解决方案。
顺水推舟,如果创建一个构造类,把一切操作对象的属性作为参数传入这个类,并赋给这个类的一个私有属性,那么在这个类的实例对象中,执行初始化方法时,利用定位运算符(.)能很轻松的访问到操作对象的属性,从而进行一些必要的操作。这个Tab类的结构如下:
- function Tab(obj){
- this.obj = obj;
- }
- Tab.prototype.init = function(){
- var $para = this.obj;
- var t1 = document.getElementById($para.id).getElementsByTagName($para.tag1);
- var t2 = document.getElementById($para.id).getElementsByTagName($para.tag2);
- this.$event = "on" + $para.eventType;
- t1[0].className = "current";
- t2[0].style.display = "block";
- for(var i=0;i<t1.length;i++){
- t1[i][this.$event] = (function(index){
- return function(){
- for(var j=0;j<t1.length;j++){
- t1[j].className = "";
- t2[j].style.display = "";
- }
- this.className = "current";
- t2[index].style.display = "block";
- }
- })(i);
- }
- }
利用这个Tab类,可以帮助我们很快捷的完成任务,而且仅仅需要二行代码,其中一行用来创建一个实例化的对象,之后进行初始化操作,这一切看上去都是那么的优雅(自己的看法 -.-)。
点击查看应用