javascript OOP编辑思想的一个实践参考

<html>
<style type="text/css">
.current { background-color: red; }
.dv { background-color: green; width: 200px; height: 200px; }
</style>
<head>
<script type="text/javascript" src="change.js"></script>
<script type="text/javascript">
/*********查询节点是否包含某个样式*******/
var hasClass = function(tag, clsName) {
    var arr = tag.className.split(/\s+/);
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] == clsName) {
            return true;
        }
    };
    return false;
}
/*********扩展getElementsByClassName函数(兼容IE低版本)*********/
if (!document.getElementsByClassName) {
    document.getElementsByClassName = function(cls) {
        var nodeArr = [];
        var nodes = document.getElementsByTagName(‘*‘);
        if (nodes && nodes.length > 0) {
            for (var i = 0; i < nodes.length; i++) {
                if (hasClass(nodes[i], cls)) {
                    nodeArr.push(nodes[i]);
                }
            };
        }
        return nodeArr;
    }
}

var changeTab = function(option) {
    // body...
    this.Init.apply(this, arguments);
}

changeTab.prototype = {
    /********参数的初始化********/
    Init: function() {
        var arr = Array.prototype.slice.call(arguments);
        this.option = arr[0] || {
            inittab: 0, //设置选中的tab索引
            tab: ‘‘, //tab的className
            tabclass: ‘‘, //tab点击之后的样式
            container: ‘‘ //div的className
        };

    },
    /*************函数执行**************/
    render: function() {
        ///获取要操作的tab和div
        this.tabs = document.getElementsByClassName(this.option.tab);
        this.contents = document.getElementsByClassName(this.option.container);
        if (this.tabs.length == 0 || this.contents.length == 0) {
            return;
        }
        if (this.tabs.length != this.contents.length) {
            return;
        }
        var that = this; ///由于闭包要用到此函数的参数,作用域不一致,所以要用that指向当前的函数
        ////设置初始显示的tab和div内容
        this.contents[this.option.inittab].style.display = ‘block‘;
        this.tabs[this.option.inittab].className = that.option.tab + ‘ ‘ + that.option.tabclass;
        for (var i = 0; i < this.tabs.length; i++) {
            /////闭包
            (function(num) {
                that.tabs[num].onclick = function() {
                    for (var k = 0; k < that.contents.length; k++) {
                        ///隐藏所有div和去除所有tab样式
                        that.contents[k].style.display = ‘none‘;
                        that.tabs[k].className = that.option.tab;
                    };
                    ///显示和设置当前点击的tab和div内容
                    this.className = that.option.tab + ‘ ‘ + that.option.tabclass;
                    that.contents[num].style.display = ‘block‘;
                }
            })(i);
        }
    },
   /*************为函数扩展功能**************/
    extend: function(obj) {
        if (obj && Object.prototype.toString.call(obj) == "[object Object]") {
            for (prop in obj) {
                this[prop] = obj[prop];
            }
        }
    }
}

window.onload=function  () { // body...
    var  tb=new    changeTab( { inittab: 0,  tab:‘sp‘, tabclass:‘current‘, container:‘dv‘ });
    tb.render();
}
</script>
</head>
<body>

<div>
<span class="sp" >111</span>
<span class="sp">222</span>
<span class="sp">333</span>
</div>
<div  id="">
<div  class="dv" style="display: none; ">dv1</div>
<div  class="dv"  style="display: none; ">dv2</div>
<div  class="dv"  style="display: none; ">dv3</div>
<div>
</body>
</html>
时间: 2024-08-28 21:30:27

javascript OOP编辑思想的一个实践参考的相关文章

javascript 利用 - 枚举思想 - 添加地名的一个小例子

利用枚举思想来添加地名,主要功能是:判断点击a标签(即当前的地名)如果在ul的li不存在的话那么就添加,有则不添加,而且还提供了相应的排序功能... HTML代码: <div id="china"> <a href="javascript:;">广州</a> <a href="javascript:;">深圳</a> <a href="javascript:;"

JavaScript结构三层——思想快速入门

本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步. 今天讨论的是什么 如果你的工作中需要写JavaScript,而你的JavaScript代码又与业务相关.我想无非就是一下三类功能: 1.请求后台数据 2.渲染后台数据,拼接Html 3.事件操作 当然你如果封装JS底层的控件,不在我们今天的讨论范围.你也许写过单文件上千行的JS,你也许维护过几千行的JS,每次重新看起来,或者增删改功能吃力吗,如果

javascript oop编程 — 实现继承的三种形式

javascript  oop编程  - 实现继承的三种形式[1] (1)模拟类的方式, 我们都知道js是原型继承机制,不存在class和instance分离的这种方式 假设,我们有两个类 function  Animal(){ this.name = "animal"; this.eat = function(){ consle.log("eating"); } } function Cat(){ this.say = function(){ console.lo

超有用的JavaScript技巧,窍门和最佳实践

超有用的JavaScript技巧,窍门和最佳实践 1. 首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. 2. 使用===取代== ==和!=操作符会在需要的情况下自动转换数据类型.但===和!==不会,它们会同时比较值和数据类型,这也使得它们要比==和!=快. [10] === 10 // is false [10] == 10 // is true '10' == 10 // is true '10' === 10 //

ArcGIS API for JavaScript开发环境搭建及第一个实例demo

原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3.9,它提供了更为丰富而又强大的功能.     一.安装前准备 1.ArcGIS Server for JavaScript API各版本下载地址:http://support.esrichina-bj.cn/2011/0223/960.html,我们选择下载最新的"ArcGIS API for Ja

玩转JavaScript OOP[0]&mdash;&mdash;基础类型

前言 long long ago,大家普遍地认为JavaScript就是做一些网页特效的.处理一些事件的.我身边有一些老顽固的.NET程序员仍然停留在这种认知上,他们觉得没有后端开发肯定是构建不了系统的. 编程语言和技术的结合使用,就像一个男人娶了好几个妞一样.在旧的时代,.NET是大房,JavaScript是偏房.大房是"后宫之主",不仅要操持家业,还能给你生娃,娃将来也要继承家业的.偏房就没那么幸运了,在"后宫"没什么地位,虽然衣食无忧,但不能管理家族事务,生的

javascript可编辑表格控件 支持全键盘操作

项目中经常会用到表格编辑控件,网上也有不少,但是确实没有完全符合我要求的, 自己写一个吧! 1.该控件支持 数据显示列,文本编辑列,选择列,下拉列,索引列,删除列 六种列类型 2.支持全键盘操作,自定义键位 包括:列焦点切换,行焦点切换,新建行,数据保存(默认 上,下,左,右 键操作) 3.丰富的事件,绝大多数的客户端操作都能触发无刷新后台事件 4.支持统计运算,可自定义运算插件 5.兼容 Ie,chorme,firefox等绝大多数主流浏览器 下载地址:http://files.cnblogs

【译】JavaScript 创建对象: 方法一览与最佳实践

本文是我在众成翻译上认领并翻译的:JavaScript 创建对象: 方法一览与最佳实践 在JavaScript中“创建对象”是一个复杂的话题.这门语言提供了很多种创建对象的方式,不论新手还是老手都可能对此感到无所适从,不知道应该选择哪一种.不过,尽管创建对象的方法很多,看上去语法差异也很大,但实际上它们的相似性可能比你所以为的要多.本文将带领你踏上一段梳理对象创建方法的旅程,为你揭示不同方法之间的依赖与递进关系. 对象字面量 我们的第一站毫无疑问就是创建对象最简单的方法,对象字面量.JavaSc

程序设计的思想与执行步骤参考

程序设计的思想与执行步骤参考 最开始做设计时:外观不重要.字体不重要.颜色不重要,最重要的是如何稳定地实现功能并使用起来. 聆听我的代码.代码reject我的时候就是它在告诉我我的毛病在哪,它将建议我新的做事方法.帮我遵循更少软件的模式.每个功能做了就要使用,使用了才知道怎样改能变得更好. 客户才是我最重要的资产,要理解客户因何需要某物.能做到的话尽量由产品构建者/研发亲自回复技术支持邮件. 明确定义产品的闪光点才是最伟大的理念. 要有所成就 = 实现承诺的功能 + 干净的界面 + 好的宣传: