<!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. 最简单的SpringBoot整合MyBatis教程

    前面两篇文章和读者聊了Spring Boot中最简单的数据持久化方案JdbcTemplate,JdbcTemplate虽然简单,但是用的并不多,因为它没有MyBatis方便,在Spring+Sprin ...

  2. 【Python3爬虫】为什么你的博客没人看呢?

    我相信对于很多爱好和习惯写博客的人来说,如果自己的博客有很多人阅读和评论的话,自己会非常开心,但是你发现自己用心写的博客却没什么人看,多多少少会觉得有些伤心吧?我们今天就来看一下为什么你的博客没人看呢 ...

  3. 无需***,轻松提速 Github

    无需***,轻松提速 Github 众所周知,Github 是全球程序员最喜欢访问的网站之一,但是在国内,会很容易出现一个水土不服的局面 -- 下载不了(稍微大一点中途就报错了),下载速度慢 .... ...

  4. [TCP/IP] 传输层-ethereal 抓包分析TCP包

    开启抓包工具抓取一个HTTP的GET请求,我的ip是10.222.128.159    目标服务器ip是140.143.25.27 握手阶段: 客户端 ===> SYN MSS=1460(我能接 ...

  5. Servlet练习:实现增删改查的综合练习

    ---恢复内容开始--- 本文为原创,转载请注明出处:https://www.cnblogs.com/Tom-shushu/p/9383066.html 本篇内容主要介绍:通过Servlet,JSP, ...

  6. 26 , CSS 构造表单

    1. 表单标签使用 2. 下拉菜单背景 3. 滚动条的使用 4. 结构化表单布局 1 1 1 1. . . . 表单标签的使用 <label for=”name”>姓名: <inpu ...

  7. 一、Snapman多人协作电子表格之——Snapman自我介绍

    一.Snapman系统介绍 Snapman是一个真正现代化的电子表格系统:QQ是即时通讯软件,那Snapman就是一个即时工作系统. 微软CEO纳德拉说:Excel才是微软最伟大的产品,Excel将所 ...

  8. (一) Keras 一元线性回归

    视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 环境为 an ...

  9. 关于Fragment里面嵌套fragment

    今天看到一篇好文章 https://www.2cto.com/kf/201609/545979.html 转载过来记录一下,往后需要的时候可以随时查看: 接下来进入正题: 动态fragment的使用 ...

  10. 微信小程序中通过腾讯地图进行逆地址解析报错message: "请求来源未被授权, 此次请求来源域名:servicewechat.com"

    在小程序中获取定位具体信息时,不要配置腾讯地图中的WebServiceAPI中的域名白名单什么的,域名配置直接在小程序后台中配置(就是这个货https://apis.map.qq.com), 千万千万 ...