<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>

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

  1. Linux 中优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)

    这样一个标题可能不太准确,因为确实无法准确地解释什么叫"文本化编辑思想".其实我这篇随笔主要是想探讨 Markdown.LaTeX.MathJax,有兴趣的朋友可以继续往下看,同时 ...

  2. JavaScript结构三层——思想快速介绍

    本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步. 今天讨论的是什么 如果你的工作中需要写JavaS ...

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

      本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步. 今天讨论的是什么 如果你的工作中需要写Jav ...

  4. javascript oop深入学习笔记(一)

    一.定义和实例化一个类: 在OOP的思想中,类是一个很重要的元素,一个类表示了具有相似的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,我们也可以称之为对象. 在javascript中, ...

  5. 转载----给JavaScript初学者的24条最佳实践

      给JavaScript初学者的24条最佳实践 1.使用 === 代替 == JavaScript 使用2种不同的等值运算符:===|!== 和 ==|!=,在比较操作中使用前者是最佳实践. “如果 ...

  6. 运用JavaScript构建你的第一个Metro式应用程序(onWindows 8)(二)

    原文 http://blog.csdn.net/zhangxin09/article/details/6793330 先前的学习中,我们已经了解了 Metro式的 JavaScript 应用程序大致如 ...

  7. Linux 桌面玩家指南:12. 优秀的文本化编辑思想大碰撞(Markdown、LaTeX、MathJax)

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  8. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

  9. 【转】45个实用的JavaScript技巧、窍门和最佳实践

    原文:https://colobu.com/2014/09/23/45-Useful-JavaScript-Tips,-Tricks-and-Best-Practices/ 目录 [−] 列表 第一次 ...

随机推荐

  1. 【转载】Spring中DispatcherServlet与ContextLoaderListener的区别

    昨天在写springmvc的时候,在web.xml中配置了DispatcherServlet,如下: <servlet> <servlet-name>DispatcherSer ...

  2. Exception in thread "http-bio-8081-exec-3" java.lang.OutOfMemoryError: PermGen space

    前言: 在http://www.cnblogs.com/wql025/p/4865673.html一文中我曾描述这种异常也提供了解决方式,但效果不太理想,现在用本文的方式,效果显著. 目前此项目只能登 ...

  3. CSS function--功能样式

    功能样式,从常用样式方法中抽离,按需使用,使用前请先阅读 CSS规范 中相关条列. /* function */ .f-cb:after,.f-cbli li:after{display:block; ...

  4. 01-05-01-2【Nhibernate (版本3.3.1.4000) 出入江湖】立即加载实现--NHibernateUtil.Initialize()和添加fetch关键字的HQL查询

    相关资料: http://www.cnblogs.com/lyj/archive/2008/10/29/1322373.html 问题的提出: 1.延迟加载,可能会引起session已经关闭的异常,例 ...

  5. Sql注入中连接字符串常用函数

    在select数据时,我们往往需要将数据进行连接后进行回显.很多的时候想将多个数据或者多行数据进行输出的时候,需要使用字符串连接函数.在sqli中,常见的字符串连接函数有concat(),group_ ...

  6. uniqueidentifier 数据类型(转)

     想要产生这种唯一标识的格式的数据: 6F9619FF-8B86-D011-B42D-00C04FC964FF 应该怎么做呢?答: uniqueidentifier 数据类型可存储 16 字节的二进制 ...

  7. Asp.net MVC4.0自定义Html辅助方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  8. POJ2299Ultra-QuickSort

    http://poj.org/problem?id=2299 题意 : 排序,求排序次数,本来以为用冒泡可以搞定,事实上,那么大的数据以及一个TLE告诉我,会超时......... 思路 : 问了一下 ...

  9. HUSTOJ(转发)

    来源:http://blog.csdn.net/xiajian2010/article/details/12954855 缘起 大四了,快毕业了,所以想准备点LAMP的知识和经验.刚好实验室里有人在搞 ...

  10. lintcode :Ugly Numbers 丑数

    题目 丑数 设计一个算法,找出只含素因子3,5,7 的第 k 大的数. 符合条件的数如:3,5,7,9,15...... 样例 如果k=4, 返回 9 挑战 要求时间复杂度为O(nlogn)或者O(n ...