疑问:

1. getElementsByTagName 和 getElementsByClassName  的区别? 分别在什么应用场景? 
 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>普通选项卡</title>
<style>
#div1 input{
background: white;
}
#div1 input.active{
background: yellow;
/* 这里直接给className为active的标签设置颜色, 1. 第一个按钮默认是黄色,所以需要先设置。
2. js只需要先清空所有input的className,再把点击的this按钮 className变成active。
不应该用js设置颜色式样!错误: aBtn[i].style.background-color = yellow;
*/
}
#div1 div{
width: 200px;
height: 200px;
background-color: #ccc;
display: none;
}
</style> <script>
window.onload = function()
{
var oDiv = document.getElementById('div1');
var aBtn = oDiv.getElementsByTagName('input');
var aDiv = oDiv.getElementsByTagName('div'); for(var i=0; i<aBtn.length; i++)
{
aBtn[i].index = i;
//把aBtn的index顺序变成数值,以便于后面aDiv使用 aBtn[i].onclick = function()
{
for(var i=0; i<aBtn.length; i++)
{
aBtn[i].className = ''; // 先清空 所有按钮 和 div 的样式
aDiv[i].style.display = 'none';
}; this.className = 'active'; // 把点击的 这个按钮 类名 变成 ‘active’ aDiv[this.index].style.display = 'block';
// 和按钮序号相对应的div,display变成block // aDiv[this.index] ==> aBtn[i].index = i
// 把aBtn的index顺序变成数值,以便于后面aDiv使用
//疑问,怎么不能直接写 aDiv[i] ?
};
};
};
</script>
</head>
<body>
<div id="div1">
<input class="active" type="button" value="aaa">
<!-- 默认把第一个按钮的class设置为active,即背景色为yellow -->
<input type="button" value="bbb">
<input type="button" value="ccc"> <div style="display: block";>mfdkjgmdkgm</div>
<!-- 默认把第一个div的display设置为block-->
<div>我梦见你梦见我</div>
<div>14597825</div>
</div>
</body>
</html>

错误1:

<script>
window.onload = function ()
{
var aBtn = document.getElementsByTagName('input');
var oDiv = document.getElementById('div1');
var aDiv = oDiv.getElementsByTagName('div'); for(var i=0; i<aBtn.length; i++)
{
aBtn[i].index = i; aBtn[i].onclick = function()
{
for (var i=0; i<aBtn.length;i++) {
aBtn[i].className = '';
aDiv[i].style.display = 'none';
}
// aBtn[i].className = '';
// 不是直接在onclick事件里 用 aBtn[i] 给其他所有按钮、div设置样式。
// aBtn[i] 只表示单个,再用一个for循环来处理,才表示全部。 this.className = 'active';
aDiv[this.index].style.display = 'block';
}
}
}
</script>

错误2:

<script>
window.onload = function()
{
var aBtn = document.getElementsByTagName('input'); for(i=0; i<aBtn.length; i++)
{
aBtn[i].onclick = function()
{
//aBtn[i].className = 'active';
this.className = 'active';
// 当前事件作用于 this, 所以给 this 加 className
};
};
};
</script>

JS学习笔记 - 普通选项卡(面向过程)的更多相关文章

  1. JS学习笔记 - 面向对象 - 选项卡 (普通选项卡改写)

    选项卡3 <script> window.onload=function () { new TabSwitch('div1'); }; function TabSwitch(id) // ...

  2. C#学习笔记——面向对象、面向组件以及类型基础

    C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组 ...

  3. WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)

    WebGL three.js学习笔记 使用粒子系统模拟时空隧道 本例的运行结果如图: 时空隧道demo演示 Demo地址:https://nsytsqdtn.github.io/demo/sprite ...

  4. WebGL three.js学习笔记 法向量网格材质MeshNormalMaterial的介绍和创建360度全景天空盒的方法

    WebGL学习----Three.js学习笔记(5) 点击查看demo演示 Demo地址:https://nsytsqdtn.github.io/demo/360/360 简单网格材质 MeshNor ...

  5. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  6. JS学习笔记5_DOM

    1.DOM节点的常用属性(所有节点都支持) nodeType:元素1,属性2,文本3 nodeName:元素标签名的大写形式 nodeValue:元素节点为null,文本节点为文本内容,属性节点为属性 ...

  7. [JS学习笔记]Javascript事件阶段:捕获、目标、冒泡

    当你在浏览器上点击一个按钮时,点击的事件不仅仅发生在按钮上,同时点击的还有这个按钮的容器元素,甚至也点击了整个页面. 事件流 事件流描述了从页面接收事件的顺序,但在浏览器发展到第四代时,浏览器开发团队 ...

  8. WebGL three.js学习笔记 加载外部模型以及Tween.js动画

    WebGL three.js学习笔记 加载外部模型以及Tween.js动画 本文的程序实现了加载外部stl格式的模型,以及学习了如何把加载的模型变为一个粒子系统,并使用Tween.js对该粒子系统进行 ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. 【Henu ACM Round#17 A】Simple Game

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 肯定是放在m-1或者m+1的. (m-1是左边的点都离a最近,而m+1则是右边的点都离他最近. 看看哪个更好就行 [代码] #inc ...

  2. 三种连接 & DOS & SYNFLOOD & 防御

    accept的时候,三次连接是建立的. 有一种DOS攻击是SYN FLOOD,就是大量的SYN到达,但是没有ACK,无法建立起连接. 防御的方法,有多种,如下: 比如,禁止部分源地址: 到达一定阈值之 ...

  3. [Python] Handle Exceptions to prevent crashes in Python

    Exceptions cause your application to crash. Handling them allows you to recover gracefully and keep ...

  4. C++模板类代码只能写在头文件?

      这个问题,实际上我几年前就遇到了.最近写个模板类玩的时候,再次遇到.   当我非常仔细的将定义和实现分开,在头文件中保留了最少的依赖后,一切就绪.cpp单独编过.但是当使用的时候,就会报告所有的函 ...

  5. Android学习笔记进阶20 之得到图片的缩略图

    <1>简介 之前往往是通过Bitmap.Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图. 现在我给大家介绍一种比较简单的方法:(网上有) 在A ...

  6. c/c++中static与extern关键字介绍

    一.C语言中的static关键字 在C语言中,static可以用来修饰局部变量,全局变量以及函数.在不同的情况下static的作用不尽相同. (1)修饰局部变量 一般情况下,对于局部变量是存放在栈区的 ...

  7. 慢慢人生路,学点Jakarta基础-集合类

    动态改变内存 因为数组在存储之前需要先申请一块连续的内存空间并且在编译的收就必须确定好它的空间大小,在运行时控件的大小无法再随着需求的改变而改变,极易出现越界的情况,数据少时又会造成内存空间浪费. 主 ...

  8. 使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

    你是否遇到过这样的情况:从终端软件登录远程的Linux主机,将一堆很大的文件压缩为一个.tar.gz文件,连续压缩了半个小时还没有完成,这时,突然你断网了,你登录不上远程Linux主机了,那么前面的半 ...

  9. deep-in-es6(四)

    不定参数和默认参数: function containsAll(str) { for(var i = 1;i < arguments.length;i++) { var hasStr = arg ...

  10. passwd---设置用户密码的相关信息

    passwd命令   passwd命令用于设置用户的认证信息,包括用户密码.密码过期时间等.系统管理者则能用它管理系统用户的密码.只有管理者可以指定用户名称,一般用户只能变更自己的密码. 语法 pas ...