【JavaScript从入门到精通】第二课

第二课 初探JavaScript魅力-02

变量

说起变量,我们不得不提起我们有一部比较古老的电视剧叫《包青天》。包青天有一把非常厉害的宝剑叫“尚方宝剑”,见到尚方宝剑有如见到皇帝。某种程度来说,变量具有类似于尚方宝剑的特性。

我们对第一课末的代码进行如下修改:

function toGreen()
{
  var oDiv=document.getElementById(‘div1‘);    //变量
  oDiv.style.width=‘300px‘;
  oDiv.style.height=‘300px‘;
  oDiv.style.background=‘green‘;
}

我们用var对变量进行定义,告诉计算机我接下来要写的是一个变量,oDiv是变量的名字,我们用oDiv这个变量把document.getElementById(‘div1‘)的值存起来(我们可以简单理解为变量是给一个东西取了个别名),那么在这个函数里凡是见到Div的地方便如同见到document.getElementById(‘div1‘),就像尚方宝剑一样。这样的程序在功能上没有发生变化,但代码却大幅度进行了简化。

函数的定义与调用

定义和调用是函数的两个重要概念。 我们来看这么一段简单的JS代码:

function show()
{                        //定义
  alert("abc");
}
show();            //调用

如果一个函数只有定义,而没调用,无论如何刷新页面,也没有任何效果。就像法律虽然存在,但如果没有人犯法,法律便如同不存在一样。而如果一个函数只有调用而没有定义,那么函数也无法执行,并且控制台会出现函数没有被定义的报错。因此,想让函数执行,函数的定义和调用缺一不可。

网页换肤

很多网站都拥有网页换肤这样类似的方便功能,可以通过点击改变网页的背景颜色或图片等。

上图为hao123的网页换肤功能,在点击换肤后整个网页所有元素的背景颜色都发生了改变。如果采用上节课的方式,我们可能需要一个一个修改元素的背景颜色,操作量非常大,因此我们有更简单的方法来完成这件事。

本例通过外链样式表来添加css,在外链样式表中准备两套不同的皮肤(即两个不同的css文件)提供网页变化。

css1的代码如下:

body{
  background:black;
}
input{
  width:200px;
  height:100px;
  background:yellow;
}

css2的代码如下:

body{
  background:#ccc;
}
input{
  width:100px;
  height:50px;
  background:red;
}

在HTML代码中,我们通过更改link的href属性便可以加载不同的css文件,所以其实换肤本质上就是更改外链的css文件。为了达成这个目的,我们需要操作HTML里的link标签。同时为了选中link标签,我们需要给给link标签加上id并在js函数里用getElementById方法选中,这样就可以对其href属性进行操作了。

完整代码如下:

<html>
  <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <link id="l1" rel="stylesheet" type="text/css" href="css1.css" />
    <script>
      function skin1()
      {
	      var oL=document.getElementById(‘l1‘);
	      oL.href=‘css1.css‘;
      }

      function skin2()
      {
	      var oL=document.getElementById(‘l1‘);
	      oL.href=‘css2.css‘;
      }
    </script>
  </head>
  <body>
    <input type="button" value="皮肤1" onclick="skin1()" />
    <input type="button" value="皮肤2" onclick="skin2()" />
  </body>
</html>

点击皮肤1和皮肤2就可以对网页进行换肤啦。

从这个例子里,我们学到以下几点:

  • 任何标签都可以加id,例如本例的link可以,甚至连body,html也可以。
  • 任何标签的任何属性都可以通过JS进行修改。
  • HTML里的属性名和JS里保持一致,HTML里面怎么写,VALUE里面就怎么写。

if判断

if语句在JS里用于判断,其基本格式为

if(条件){
  语句1
}
else{
  语句2
}

其中else不是必要的。整个语句代表的含义为,如果条件成立,则执行语句1,如果条件不成立,则执行语句2。举一个生活中最简单的小例子,如果天气预报有雨,我们则带伞,如果不下雨,则不带伞。这个例子用if语句的话描述如下:

if(预报有雨){
  带伞
}
else{
  不带伞
}

那么if语句在JavaScript里面应该怎么应用呢?我们再举一个网页的小例子。

Google上方菜单栏的“更多”选项,当我们点击的时候,会展开一个菜单栏,再次点击的时候会收回。这个非常常用的功能就是用if语句完成的。和onmouseout和onmouseover不同,虽然我们每次进行的都是点击操作,但根据菜单栏展开状态的不同,每次点击产生的效果也就不一样。当菜单栏处于显示状态的时候,进行点击的操作是让菜单栏隐藏;反之,当菜单栏处于隐藏状态时,进行点击的操作是让菜单栏显示。用一句简单的话来描述我们需要干的事情就是:当点击的时候,如果div是显示的,将其隐藏掉(将其display属性改为none);反之,将其显示出来(将其display属性改为block)。

因此,我们可以用if语句进行表达:

if(div是显示的){
  oDiv.style.display=‘none‘;
}
else{
  oDiv.style.display=‘block‘;
}

完整代码如下:

<html>
  <head>
  <meta charset="utf-8">
  <title>无标题文档</title>
  <style>
#div1 {width:100px; height:200px; background:#CCC; display:none;}
  </style>
  <script>
    function showHide()
    {
  	  var oDiv=document.getElementById(‘div1‘);

	  if(oDiv.style.display==‘block‘)
	  {
	    oDiv.style.display=‘none‘;
	  }
	  else
	  {
	    oDiv.style.display=‘block‘;
	  }
    }
  </script>
</head>

  <body>
    <input type="button" value="显示隐藏" onclick="showHide()" />
    <div id="div1">
    </div>
  </body>
</html>

效果如下:

这里出现了一个新的符号,==(双等号)。我们之前讲过,在JS里=代表赋值(改变),而双等号则更接近于数学中的等号,其作用是判断两边是否相等。在本例中,oDiv.style.display==‘block‘即代表对display的值是否为block进行判断,如果成立则代表div1是显示的状态,执行if语句将其隐藏;反之不成立则代表div1是隐藏状态,执行else语句将其显示。

为a链接添加JS

HTML中的a链接大家应该再熟悉不过了,但是大家知道,a链接也是可以添加JS的吗?通常情况下,我们在a标签的href属性里放的值是网址,不过实际上也可以在里面放入JS函数执行。

<a href="javascript:alert(‘a‘);">链接</a>

使用上述代码,点击链接同样可以执行JS函数。冒号前的javascript可以告诉浏览器,我们要执行的不是网址而是JS代码,冒号后的则是执行内容。

不过,一般来讲,我们都不会真的在a标签里放JS代码,而是让它空着:

<a href="javascript:;">链接</a>

这样做的目的有两个。首先,在a标签里面放代码非常不好,这一点我们学到事件的时候就会明白。其次,这种写法比起在href属性中使用#有一个优势:点击后没有反应,不会直接跳到网页的顶部。

例外的className

在网页换肤的时候我们讲过,HTML里的属性名和JS里保持一致,HTML里面怎么写,VALUE里面就怎么写——唯一的例外就是className。因为JS里的class是保留字,在JS里有其他作用,如果我们在JS里直接使用HTML里的class属性,程序是不会执行的,所以JS用className代替了class。当我们想改变一个元素的class时,采用以下写法:

<html>
  <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    <style>
      #div1 {
        width:100px;
        height:100px; border:
        1px solid black;
      }
      .box {
        background:red;
      }
    </style>
    <script>
      function toRed()
      {
	    var oDiv=document.getElementById(‘div1‘);
  	    oDiv.className=‘box‘; //className,而不是class
      }
    </script>
  </head>

  <body>
    <input type="button" value="变红" onclick="toRed()" />
    <div id="div1">
    </div>
  </body>
</html>
时间: 2024-10-27 19:38:48

【JavaScript从入门到精通】第二课的相关文章

javaScript从入门到精通3.md

今日鸡汤:这个世界不会因为你的付出就必须给予回报,也不会因为你以怎样的方式对待别人,就要求他人同等对待你.人活在这世上,最难的就是保持一份谦卑和平和,而这份谦卑,来源于内心的真诚和踏实的努力. 前提摘要 JavaScript 是什么 解析执行:轻量级解释型的,或是 JIT 编译型(即时编译)的程序设计语言 语言特点:动态,头等函数 (First-class Function) - 函数可以作为别的函数的参数.函数的返回值,赋值给变量或存储在数据结构中 执行环境:在宿主环境(host enviro

Shell编程从入门到精通-第二章.shell变量

二.Shell变量 2.1.什么是变量 在小学的时候我们学过数学方程式,例如:已知x=1,y=x+1那么y等于多少 在上述的题目中x和y被称为未知数,但是在shell编程里它们是变量名,等号右边的1和x+1是变量的内容,(这里"="被称为赋值) 通过上面的介绍可以得出,变量就是用一个固定的字符串代替更多,更复杂的内容,该内容包含变量.路径.字符串等其他的内容,变量是暂时存储数据的地方和标记,所存储的数据存在内存空间中,通过调用内容空间的变量名字就可以取出变量对应的数据.使用变量最大的好

JavaScript从入门到精通(附光盘1张):作者:明日科技出版社:清华大学出版社出版时间:2012年09月

本书介绍 一:本书 pdf 获取信息 本书下载:请申请加入本群 (QQ群:668345923),   并联系群主. 本群主有:本书pdf 全文教材 及附带的 光盘内容 二:本书目录介绍 第1篇  基 础 知 识 第1章  初识JavaScript 视频讲解:28分钟 1.1 JavaScript简述 1.1.1 JavaScript的起源 1.1.2 JavaScript的主要特点 1.1.3 JavaScript的应用 1.2 JavaScript的环境要求 1.2.1  硬件要求 1.2.2

javaScript从入门到精通2.md

Web API Web API 介绍 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. 任何开发语言都有自己的API:API的特征输入和输出(I/O):API的使用方法(console.log()) 浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM),此处的Web API特指浏览器提供的API(一组方法

Scala入门到精通——第二十七节 Scala操纵XML

本节主要内容 XML 字面量 XML内容提取 XML对象序列化及反序列化 XML文件读取与保存 XML模式匹配 1. XML 字面量 XML是一种非常重要的半结构化数据表示方式,目前大量的应用依赖于XML,这些应用或利用XML作为数据交换格式,或利用XML进行文件配置等.像JAVA.C++及其它流行的程序开发语言都是依赖于第三方库来实现XML的操作,例如JAVA经常通过JDOM,DOM4J等XML处理工具进行XML的操纵,但Scala提供了对XML的原生支持,通过scala.xml._包下的类或

Scala入门到精通——第二十五节 提取器(Extractor)

作者:摇摆少年梦 视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 apply与unapply方法 零变量或变量的模式匹配 提取器与序列模式 scala中的占位符使用总结 1. apply与unapply方法 apply方法我们已经非常熟悉了,它帮助我们无需new操作就可以创建对象,而unapply方法则用于析构出对象,在模式匹配中特别提到,如果一个类要能够应用于模式匹配当中,必须将类声明为case class,因为一旦被定义为case class,

Scala入门到精通——第二十八节 Scala与JAVA互操作

本节主要内容 JAVA中调用Scala类 Scala中调用JAVA类 Scala类型参数与JAVA泛型互操作 Scala与Java间的异常处理互操作 1. JAVA中调用Scala类 Java可以直接操作纵Scala类,如同Scala直接使用Java中的类一样,例如: //在Person.scala文件中定义Scala语法的Person类 package cn.scala.xtwy.scalaToJava class Person(val name:String,val age:Int) //伴

Scala入门到精通——第二十四节 高级类型 (三)

作者:摆摆少年梦 视频地址:http://blog.csdn.net/wsscy2004/article/details/38440247 本节主要内容 Type Specialization Manifest.TypeTag.ClassTag Scala类型系统总结 在scala中,类(class)与类型(type)是两个不一样的概念.我们知道类是对同一类型数据的抽象,而类型则更详细. 比方定义class List[T] {}, 能够有List[Int] 和 List[String]等详细类型

Scala入门到精通——第二十节 类型參数(二)

本节主要内容 Ordering与Ordered特质 上下文界定(Context Bound) 多重界定 类型约束 1. Ordering与Ordered特质 在介绍上下文界定之前,我们对scala中的Ordering与Ordered之间的关联与差别进行解说,先看Ordering.Ordered的类继承层次体系: 通过上面两个图能够看到,Ordering混入了java中的Comparator接口.而Ordered混入了java的Comparable接口.我们知道java中的Comparator是一