<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>js制作一个选项卡</title>
<style type="text/css">
.tab_title span.active {
background:#000;
color: #FFF;
}
.tab_content {
border:1px solid #000;
padding: 20px;
}
.tab_content div {
display: none;
}
.tab_content div.active {
display: block;
}
</style> <script type="text/javascript">
//1.选取到tab选项卡 2.为选项卡添加事件
window.onload = function(){
var arr_tab_span = document.getElementsByTagName('span');
var tab_section = document.getElementById('sec_con');
var arr_tab_div = tab_section.getElementsByTagName('div'); //console.log(arr_tab_span);
//console.log(tab_section);
//console.log(arr_tab_div); for (var i=0; i<arr_tab_span.length;i++) {
arr_tab_span[i].index = i;
arr_tab_span[i].onclick = function(){ //为选项卡点击添加事件
for(var j=0;j<arr_tab_span.length;j++){
arr_tab_span[j].className = '';
arr_tab_div[j].className = '';
}//for结束
this.className = 'active';
arr_tab_div[this.index].className = 'active'; }
}//for结束
}
</script> </head>
<body>
<div style="width: 500px;">
<nav class="tab_title">
<span class="active">语文</span>
<span>数学</span>
<span>娱乐</span>
</nav>
<section class="tab_content" id="sec_con">
<div class="active">
鲁迅是语文课本上的
</div>
<div>
祖冲之是数学课上的
</div>
<div>
孙悟空是娱乐电视里的
</div>
</section>
</div>
</body>
</html>

代码效果如下

现在对JS代码进行改造,添加全局变量,函数不要嵌套,变成了如下,亦可用

         <script type="text/javascript">
//1.选取到tab选项卡 2.为选项卡添加事件
var arr_tab_span,
tab_section,
arr_tab_div;
window.onload = function() {
init();
} function init(){
arr_tab_span = document.getElementsByTagName('span');
tab_section = document.getElementById('sec_con');
arr_tab_div = tab_section.getElementsByTagName('div'); for(var i = 0; i < arr_tab_span.length; i++) {
arr_tab_span[i].index = i;
arr_tab_span[i].onclick = change;
} //for结束
} function change() { //为选项卡点击添加事件
for(var j = 0; j < arr_tab_span.length; j++) {
arr_tab_span[j].className = '';
arr_tab_div[j].className = '';
} //for结束
this.className = 'active';
arr_tab_div[this.index].className = 'active';
} </script>

继续改造,js代码变成如下,面向对象的方式,即可成功运行

         <script type="text/javascript">
window.onload = function() {
var tab1 = new Tab();
tab1.init();
} function Tab(){
this.arr_tab_span = document.getElementsByTagName('span');
this.tab_section = document.getElementById('sec_con');
this.arr_tab_div = this.tab_section.getElementsByTagName('div');
} Tab.prototype.init = function(){
for(var i = 0; i < this.arr_tab_span.length; i++) {
var _this = this;
this.arr_tab_span[i].index = i;
//this.arr_tab_span[i].index = i;
this.arr_tab_span[i].onclick = function(){
_this.change(this);
}
} //for结束
} Tab.prototype.change = function(obj) {
//console.log(this);
//为选项卡点击添加事件
for(var j = 0; j < this.arr_tab_span.length; j++) {
this.arr_tab_span[j].className = '';
this.arr_tab_div[j].className = '';
} //for结束
obj.className = 'active';
this.arr_tab_div[obj.index].className = 'active';
} </script>

原生js,从面向过程的方法到面向对象的方法,写个选项卡练练手的更多相关文章

  1. JS是面向过程、面向对象还是基于对象?面向对象的代码体现

    一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...

  2. 使用原生js来控制、修改CSS伪元素的方法总汇, 例如:before和:after

    在网页中,如果需要使用辅助性/装饰性的内容的时候,我们不应该直接写在HTML中,这样会影响真正的内容,这就需要使用伪元素了,这是由于css的纯粹语义化是没有意义的.在使用伪元素的时候,会发现js并不真 ...

  3. 面向对象和面向过程,python中的类class,python中程序的入口——main方法,

    1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...

  4. 理解面向过程(OPP)、面向对象(OOP)、面向切面(AOP)

    概念 面向过程编程OPP:Procedure Oriented Programming,是一种以事物为中心的编程思想.主要关注“怎么做”,即完成任务的具体细节. 面向对象编程OOP:Object Or ...

  5. 面向过程 vs 面向对象

    从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...

  6. 原生js实现滚动条

    var SimulateScroll = (function(){ var oParent = document.getElementById('wrap-scroll-bar'), oBox = d ...

  7. <一>面向对象分析之面向对象和面向过程

    面向对象        ---->注重的是拆分,组装.        ---->封装,继承,多态,复用(只是现象)        ---->面向对象变成的目标从来就不是复用.相反,对 ...

  8. OC - 1.面向过程和面向对象的思想对比

    一.面向过程 1> 思想 面向过程是一种以过程为中心的最基础编程思想,不支持面向对象的特性. 面向过程是一种模块化程序设计方法 2> 开发方法 面向过程的开发方法是以过程(也可以说是模块) ...

  9. PHP面向对象和面向过程

    编程界不论是PHP.Python都有这么两种编程思想,oop面向对象.pop面向过程,这两种在功能上没有多大区别,但是在代码编写上却有很大区别.今天就记录一下面向对象和面向过程的优点.缺点.定义.实现 ...

随机推荐

  1. 深入理解Linux内核 学习笔记(2)

    第二章 :内存寻址 略.基本同计算机组成原理中的讲述 内核代码和数据结构会存储在一个保留的页框中. 常规Linux安装在RAM物理地址0x00100000开始的地方.因为:页框0是由BIOS使用,存放 ...

  2. SpringCloud微服务如何优雅停机及源码分析

    目录 方式一:kill -9 java进程id[不建议] 方式二:kill -15 java进程id 或 直接使用/shutdown 端点[不建议] kill 与/shutdown 的含义 Sprin ...

  3. kubernetes系列09—Ingress控制器详解

    本文收录在容器技术学习系列文章总目录 1.认识Ingress 1.1 什么是Ingress? 通常情况下,service和pod仅可在集群内部网络中通过IP地址访问.所有到达边界路由器的流量或被丢弃或 ...

  4. 使用 FFT 分析周期性数据

    可以使用傅里叶变换来分析数据中的变化,例如一个时间段内的自然事件. 天文学家使用苏黎世太阳黑子相对数将几乎 300 年的太阳黑子的数量和大小制成表格.对大约 1700 至 2000 年间的苏黎世数绘图 ...

  5. DSAPI 键盘鼠标钩子

    通常,说到Hook键盘鼠标,总需要一大堆代码,涉及各种不明白的API.而在DSAPI中,可以说已经把勾子简化到不能再简化的地步.甚至不需要任何示例代码即会使用.那么如何实现呢? Private Wit ...

  6. ITSA(IT Strategy and Architecture)方法介绍

    Architecture Capability – At a Glance Architectural coherence part1 Architectural coherence part2 SA ...

  7. 并发concurrent---2

    背景:并发知识是一个程序员段位升级的体现,同样也是进入BAT的必经之路,有必要把并发知识重新梳理一遍. 并发concurrent: 使用ThreadLocal可以实现线程范围内共享变量,线程A写入的值 ...

  8. Java 8中Stream API学习笔记

    1)函数式编程的优势和劣势分别是什么?优势:①不可变性 ②并行操作 ③执行顺序更灵活 ④代码更加简洁纯粹的函数式编程,变量具有不可变性,同一个参数不会在不同场景下得出不同的结果,因此大大增强了系统的稳 ...

  9. Scope 功能的改进

    前段时间发表了一篇文章 面向对象的一小步:添加 ActiveRecord 的 Scope 功能 提到一种更加友好的方式做数据库查询.经小伙伴的建议,在满足同样条件下,可以有更为简洁的封装方法. 这需要 ...

  10. 对于python爬虫urllib库的一些理解(抽空更新)

    urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urllib库中,所有和网 ...