<!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. 网络协议 15 - P2P 协议:小种子大学问

    [前五篇]系列文章传送门: 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准 网络协议 11 - Socket 编程(下):眼见为实耳听为虚 网络协议 12 - HTTP 协议: ...

  2. C# 《编写高质量代码改善建议》整理&笔记 --(五)成员设计

    1.可以字段应该重构为属性 2.谨慎将数组或集合作为属性 数组和集合作为属性存在会引起这样的一个分歧:如果属性是只读的,我们通常会认为他是不可改变的.但是如果将只读属性应用于数组和集合,而元素的内容和 ...

  3. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  4. 一次 C# 查詢數據庫 算法優化的案例

    最近有次在修改某段程式時,發現一段程式算法看起來簡單. 但背後因為多次查詢數據庫,導致效能問題. 這段程式主要是利用 EPPLUS 讀取 Excel 資料,檢查資料是否已存在數據庫中,若有就將已存在的 ...

  5. I/O输入流基础之FileInputStream

    InputStream:是所有字节输入流的父类,其作用是:用这个流把网络数据(getOutputStream()),文件系统的数据读入内存 由与  public abstract class Inpu ...

  6. kali linux 2019.1 替换burpsuite pro 1.7.37

    下面全部实操: 先切换JDK版本为1.8.执行 update-alternatives --config java 然后会显示多个jdk版本,1.8选3 输入java –version会显示jdk为1 ...

  7. 解决PostGIS打开shp文件输入输出模块出现"找不到文件libintl-9.dll"的问题

    找到shp2pgsql-gui.exe这个程序的目录 复制一份libintl-8.dll副本,改名为libintl-9.dll即可.

  8. 基于Django 的 FreeSwitch 开源GUI 管理系统 YouPBX

    YouPBX YouPBX 是一个强大 FreeSwift (电话软交换系统) 的管理GUI系统,基于Django开发,功能全面,体验友好,可以基于此项目做一个完善的IPPBX系统.呼叫中心应用等 项 ...

  9. 为什么 User 应该翻译为 「使用权人」 ?

    User, 旧译「用户」,我在此向大家倡议有条件地选择翻译为「使用权人」. 1. __使用权人__更能反应 User 的本质特征 我们看到一匹马的时候不会说这是一头猪,而 User 的本质是什么?在我 ...

  10. (五) Keras Adam优化器以及CNN应用于手写识别

    视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 Adam,常 ...