博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript
阅读量:5163 次
发布时间:2019-06-13

本文共 30065 字,大约阅读时间需要 100 分钟。

JavaScript

一、什么是JavaScript

  1) Javascript是netscape公司开发的一种在浏览器端执行的脚本语言,需要嵌入到html当中才能执行 。

    是一种基于对象和事件驱动解释性的脚本语言,嵌入到页面上。

  2) 其作用主要包括:

   为页面添加动态效果

数据验证(指的是,对表单中的数据进行合法性验证,只有验证通过才能提交)

   操作网页,实现一些动态效果

   访问浏览器,获得浏览器的一些信息。(比如获得浏览器的类型、版本等)

   ajax核心技术之一

二、javaScript的一些特点

  html+css+js--->需要浏览器查看,要讲究标准的规范代码。保证浏览器兼容性。

  1) javascript是类c的语言

  2) javascript脚本可以保存在. js文件里,也可以直接写在html文件里

  3) javascript基于对象,内置大量现成对象,不是纯粹的面向对象的语言 。比如,没有定义类的语法,也没有继承和多态。

  4) javascript是一种弱类型语言,即变量在声明时,不能明确声明其类型 。变量的类型是在运行时确定

的,并且可以随时改变

  5)javaScript是解释性代码,代码错误,则无效果。Firefox浏览器使用错误控制台查看

三、事件定义方式

(1)在定义事件时直接写入JavaScript脚本(所有的事件都是on开头的)

如:<input  type=”button”  value=”第一个按钮”  οnclick=” alert( ‘hello,world!’ ); ”>//注意分号

(2)嵌入式,在页面上嵌入<script></script>标签,在标签中放置JavaScript代码

如:<head>

<script type=”text/javascript”  language=”javascript”>

alert(“ hello world ”);

</script>

</head>

(3)文件调用式,将JavaScript代码写入一个单独的文件,并保存为.js后缀。外部文件不能包含<script>标签。

<head>

<script language=”JavaScript” src=”文件名.js”></script>//注意路径问题

</head>

html文件所在的路径为当前路径。js文件中只能写脚本。

四、javascript的组成部分

     1)ECMAScript规范

            主要定义了javascript的语言基础部分。

              各个浏览器都严格遵守该规范,没有兼容性问题 (所有浏览器都支持)。

            ECMAScript规范由ECMA制订。

      2)dom (document  object  model)文档对象模型

              主要定义了如何将html转换成一棵符合dom规范的树,并且如何对这棵树进行相应的操作。

              该规范由w3c定义,但是,部分浏览器没有严格遵守该规范。写代码时需要考虑兼容性问题。

      3)bom(browser object model) 浏览器对象模型

浏览器内置的一些对象,用来操作窗口。

这些对象包括window、screen、location、navigator、document、XmlHttpRequest等。

虽然该部分没有规范,但是,各个浏览器都支持这些对象

         4)事件处理

              有兼容性问题。

       5)JavaScript是使用ECMAScript标准的脚本,操作DOM API和BOM API,进而控制浏览器中的网

          页显示效果和浏览器行为。

五、JavaScript的基本语法

  JavaScript基本语法:每个浏览器都支持,不存在兼容问题。

  javascript中大小写敏感。

  javascript注释://  /**/

  1、标识符

       变量方法的命名,由字母、$、下划线开头,后面可以是字母、$、下划线和数字。

       不能使用关键字。不能使用数字为开头。建议使用长变量名

  2、语句

       语句以“;”为结尾。

  3、变量

          JavaScript(JS)是弱类型语言,不用明确声明其类型,声明变量使用var 关键字。

       变量的类型是在运行时确定的,并且可以随时改变。

       可以使用typeof获知变量的类型。

       <html>

                <head>

                         <meta http-equiv="content-type" content="text/html ;charset=utf-8">

                           <script type=”text/javascript”>

                                    function test(){

                                             var value;            alert(typeof value);

                                             value=1;              alert(typeof value);

                                             value="hello";     alert(typeof value);

                                    }

                           </script>

                </head>

                <body><input type="button" value="类型检查" οnclick="test();"></body>

       </html>

  4、数据类型

     简单类型:string、number、boolean

         特殊类型:null、undefined

         复杂类型:Array等

     (1)string类型

 string类型表示文本,由unicode字符、数字、标点符号组成的序列。

 string属于基本类型,没有char类型。

 首尾由单引号或双引号括起。

 特殊字符适用转义,转义符\,比如:\n , \\ , \’ , \”       var v=v="m\'a\"r\ny";

 中文:\u4e00表示一个汉字,用于那些不允许使用中文的表达式,比如正则表达式。

 var aa=”\u4f60\u597d欢迎来到java世界”;

 alert(aa);//你好欢迎来到java世界

(2)number类型

               number类型代表数字,不管是整数、小数都是number

      number类型有一个对应的包装类Number

 所有数字都采用64位浮点格式存储,类似于double格式。

 整数:10进制的整数由数字的序列组成。

       16进制数据前面加上0x

   8进制前面加个0

 浮点数:使用小数点记录数据,如3.4 5.6

     使用指数记录数据,如4.3e23=4.3*10^23;

(3)boolean类型

      仅有两个值:true和false,也代表1和0。

 实际运算中true=1,,false=0

 var b = true;

          var c = b+1;

 alert(c);//2

 boolean类型使用时,要注意的问题:

        不为空的字符串,转换成true。

        非零的数字,转换成true。

        null、undefined转换成false。

           boolean类型也有包装类Boolean。

function test(value){    //value类型为undefine

                           alert(typeof value);

                          if(! value){ 

alert("没有参数!"); 

}

                }

(4)null

空类型,只有一个值null。null在程序中代表“无值”或者“无对象”。

可以通过给一个变量赋值null来清除变量的内容。

在使用typeof测试类型时,返回object

(5)underfine(未定义类型)

声明了变量但从未赋值或者对象属性不存在

未定义类型只有一个值undefine,typeof检查,返回undefine

   5、数据类型转换

 (1)隐式转换

 不同类型数据在计算过程中会自动进行转换

 数字+字符串:         数字转换成字符串

 数字+布尔值:         true转换为1,false转换为0

 字符串+布尔值:     布尔值转换成字符串true或者false

 布尔值+布尔值:     布尔值转换为数值1或0

                function f()

                   {

                           var s="a";

                           var n=1;

                           var b1=true;

                           var b2=false;

                           alert(s+n);//a1

                           alert(n+b1);//2 boolean类型,true是1,false是0

                           alert(s+b1);//atrue

                           alert(b1+b2);//1

 }             

 (2)显示转换

  数据类型转换函数

  toString  转换成字符串,所有数据类型都可转换为string类型

  parseInt()

强制转换成整数

如果不能转换,则返回NAN(not  a  number)

parseInt(“6.12”)=6

  parseFloat()

强制转换成浮点数

如果不能转换,则返回NaN

parseFloat(“6.12”)=6.12

(3)案例

                 <input type="text" id="txtNumber"/>

<input type="button" value="计算平方" οnclick="getS();">

function getS()

{

         //得到数据

                           var s=document.getElementById("txtNumber").value;

                           //isNaN()方法判断给定的是否为NaN

                           if(isNaN(s)){

                                    alert("请录入数值");

                           }else{

                                    var n=parseInt(s);

                                    alert(n*n);

                           }

6、运算符

  (1)算术运算

   + -  *  /  %

   -可以表示减号,也可以表示负号

   +可以表示加法,也可以用于字符串的连接

   递增(++)       递减(--)

   (2)关系运算符

   >   <  >=  <=  ==  !=

   严格相等:===    数值相同,类型相同

   非严格相等:==   数值相同

                  function f()

                     {

                           var b=1;

                           var a="1";

                           alert(a==b);//true

                           alert(a===b);//false

                           alert(0=="")//true,空字符串底层存的是"0"

                           alert("0"==0)//true

                           alert(""=="0");//false

                   }

   (3) 逻辑运算

     !  &&  ||

   (4)条件运算符

   条件运算符又称“三目”/“三元”。

   xxx?a1:a2;

7、控制语句

   if          switch-case        for             while

   <input type="button" value="计算100内的和" οnclick="getSum();">

          function getSum()

   {

                  var sum=0;

                  for(var i=0;i<=100;i++){

                           sum+=i;

                  }

                  alert(sum);

   }      

五、常用内置对象

js中的对象:内置对象、DOM、BOM对象、浏览器对象等

javascript内置对象一般首字母大写。

javascript是一种基于对象语言。对象由属性和方法封装而成(和java一样的用法)

javascript常用内置对象有:

简单数据对象:String  Number  Boolean

组合对象: Array  Math   Date

高级对象:Function  RegExp

1String对象

a、创建

            var s=”mary”;

   var s=new String(“mary”);

b、属性

        s.length字符串中字符的个数

c、方法

    s.charAt(index) 返回指定位置的字符

    s.charCodeAt(index) 返回字符的Unicode编码

  s.substring(from, to) 返回子字符串

  s.indexOf(str) 指定字符串在原字符串中第一次出现的位置。

  s.lastIndexOf(str) 指定字符串在原字符串中最后一次出现的的位置。 

  s.toLowerCase/toUpperCase 返回小写/大写形式

    s.split(bystr) 返回分割后的字符串数组

    满足正则表达式的方法

    s.match(regexp) 返回匹配指定正则表达式的字符串,返回的结果是一个数组。

  s.search(regexp) 返回按照正则表达式检索到的字符串位置。

  s.replace(regexp,newStr) ; 替换符合正则表达式规定的字符串

 d、字符串,常常需要结合正则表达式

                         <head>

                                  <meta http-equiv="content-type" content="text/html ;charset=utf-8">

                                    <script>

                                             function test(){

                                                      var str='766908296@qq.com';

                                                      alert(str.length);

                                                      var qq=str.substring(0,str.indexOf('@'));

                                                      alert(qq);

                                                      var isEmail=str.match(/\w+@\w+\.\w+/);

                                                      alert(isEmail);

                                                      var reg=new RegExp(/\w+@\w+\.\w+/);

                                                      var str1="tom.com";// ''和""都表示字符串

                                                      isEmail=str1.match(reg);

                                                      alert(isEmial);//匹配上,返回被匹配字符串。匹配不上返回空(null)

                                             }

                                    </script>

                         </head>

                       <body><input type="button" value="String检测" οnclick="test();"></body>

2Array对象

Array 数组,相当于java里的ArrayList

数组的大小可以改变,并且数组元素的类型可以混合存放。

(1)创建和初始化

     a、使用new Array( )方式创建数组

   var ary1=new Array( 5); 创建长度为5的空数组(长度可变)

   var ary2=new Array();    长度为0的数组

   ary1[1]=1;

   ary1[2]="abc";

   ary1[3]="3";

   ary1[5]=8;                            添加一个元素,长度为6

   ary2[0]=9;                                添加一个元素,长度由0变为1

   alert("ary1:"+ary1.length+","+ary1.join("-"));

b、使用JSON语法创建数组对象

   var ary3=[1,false,"abc"];

   alert(ary3.toString()+ary3.length); 注意toString用“,”连接

   两种创建方式没有任何区别

c、二维数组

   var a=new Array();

   a[0]=[“1”,”2”];

(2)属性

 length属性 : 返回数组的长度

(3)方法 

 a、toString()   返回数组元素连接后的字符串。中间用”,”连接

 b、join(byStr)  用于将数组中的各个元素连接成字符串

               byStr为连接符

 c、concat(value1,value2,..)  用于连接两个数组,生成一个新数组

var a=[1,2,3];

var b=a.concat(4,5);

alert(b.toString());//1,2,3,4,5

 d、slice(start ,end) 用于截取数组的一部分并以数组的形式返回。原数组不会有任何变化。

start: 开始位置索引

end: 结束位置,省略则相当于从start位置截取以后所有的数组元素。

var arr1=[‘a’,’b’,’c’,’d’,’e’,’f’,’g’];

alert(ar1.slice(2,4).toString());// c,d

alert(ar1.slice(4).toString);//e,f,g

e、reverse()  将数组反转。不会生成新数组

f、sort(sortFunc)  数组排序排序

                    sortFunc:可选项,用来确定元素顺序的函数的名称。

sortFunc缺省时按照字符串的排序方式,即按照字符串首字符大小升序排序

                          可通过如下形式来重新定义排序方式:

                          var arr4 = arr3.sort(

function(a1,a2){

//降序排,假如 2,5 2-5=-3<0表示2小于5,所以2应该放在5后面。

return a1-a2;

//升序,假如2,5, 5-2=3>0表示2大于5,则2应该放在5的前面。

return a2-a1;

                          }) ;

                                                   <script>

                                                               function sortTest(){

                                                                      var ary = [9,2,12,3,11];

                                                                      ary.sort();                     默认按照字符编码排序

                                                                       alert(ary.toString());              [11,12,2,3,9]

                                                                      ary.sort(function(v1,v2){               自定义排序规则

                                                                                 return v1-v2;                        

});

                                                                   alert(ary.toString())      ;        [2,3,9,11,12]

//按照字符串长度排序

                                                                      var names = ['Tom','Li','Andy','Robin'];

                                                                      names.sort(byLength);

函数是一个对象,函数名是这个函数对象的引用

                                                                      alert(names.toString());

                                                               }

                                                               function byLength(v1, v2){

                                                                      return v1.length - v2.length;

                                                               }

                                    </script>

g、案例

                                 <input type="text" value="23,1,4,56,32" id="txtArr"/>

                                    <input type="button" value="翻转" οnclick="operArr(1);">

                                    <input type="button" value="排序" οnclick="operArr(2);">

         <input type="button" value="自定义排序" οnclick="operArr(3)"/>

 

function operArr(t)

{

                                             var str=document.getElementById("txtArr").value;

                                             var ary=str.split(",");

                                             switch(t){

                                                      case 1:ary.reverse();break;

                                                      case 2:ary.sort();break;

                                                      case 3:ary.sort(function(f1,f2){

                                                                        return f1-f2;

                                                              });break;

                                             }

alert(ary.toString());

}

3Math对象

     Math对象用于执行数学任务。

     没有构造函数Math()。

     无需创建,直接把Math作为对象使用就可以调用其所有属性和方法。

     a、属性

Math.E      自然数

Math.PI     圆周率

Math.LN2 ln2等

b、方法

      random() : 随机生成一个0到1之间的数字。

    ceil() : 对一个数上舍入。

     floor() : 对一个数下舍入

----------------------------------->

-2  -1.5  -1  0  1  1.5  2

alert ( Math.floor(1.5)+Match.floor(-1.5) ); 1,-2

alert ( Math.ceil(1.5)+Match.ceil(-1.5) );2,-1

产生【0,33)之间的随机数:     Match.ceil(random()*100)%33

               Match.ceil(random()*33)

                                  3-9之间的整数          Math.floor(Math.random()*6+3)

c、案例

   实现随机数的产生        

      <input type="button" value="2-13之间的随机整数" οnclick=ranNum(2,13);>

                       function ranNum(min,max)

{

                                    var random=Math.random();

                                    var r=Math.floor(random*(max-min)+min);

                                    alert(r);

}

4Number对象

Number对象是原始数值的包装对象

a、创建

              var  myNum=new Number(value);

     var  myNum=Number(value);

     var  myNum=value;

b、属性

                最大值 :Number.MAX_VALUE

                最小值 :Number.MIN_VALUE

                如果超过这个范围,会返回Infinity,或者-Infinity

                  <head>

                                  <meta http-equiv="content-type" content="text/html ;charset=utf-8">

                                    <script>

                                             function test(){

                                                      var num=Number.MAX_VALUE;

                                                      alert(num);

                                                      num+=Number.MAX_VALUE;

                                                      alert(num);

                                             }

                                    </script>

                          </head>

                         <body><input type="button" value="number越界访问" οnclick="test();"></body>

c、方法

   toString()     数值转换为字符串

   toFixed()       数值转换为字符串,并保留小数点后一定位数。

sum.toFixed(2);对sum保留两位小数

 

5RegExp对象

 RegExp对象表示正则表达式,它是对字符串执行模式匹配的强大工具。

  g---global全局的全部符合正则表达式的都

  i----忽略大小写ignource

  m---multi多行文本中适合

 a、创建

     var rgExp=/pattern/flags ---> /表达式/gim

         var rgExp=new RegExp(“pattern”,[“flags”]);

 b、方法

 rgExp.test(String);如果字符串string中包含与rgExp匹配的文本,则返回true,否则返回false。

 c、应用

   (1)结合 string 对象的方法,常用于对于字符串的处理

   (2)使用正则表达式对象的 test方法,用于实现录入的验证

      d、案例

验证用户名:3-5个大小写字母

用户名:<input type="text" name="username" οnblur="valiName();" id="username"/>

function valiName(){

                                    var name=document.getElementById("username").value;

                                    var reg=/^[a-zA-Z]{3,5}$/;//加^和$表示一整个字符串从开始到结束满足正则表达式。

                                    if(!reg.test(name)){

                                             alert("录入错误!");

                                    }

}

6Date对象

Date对象用于处理日期和时间

a、创建对象

   var now=new Date();//当前日期和时间

   var nowd2=new Date(“2013/3/20 11:12”);

b、方法

   读取日期的相关信息    

               getDate()    返回一个月中某一天

getDay()    返回一周中的某一天

getYear()    返回年份

getMonth()         返回月份

   修改日期                       

setDate(day_of_month)

setMonth( month )      月份从0开始,年日从1开始

setHours()

   转换为字符串

toString()

toLocaleTimeString()   返回时间部分

toLocaleDateString()    返回日期部分

c、案例

      <input type="button" value="日期相关" οnclick="getDateInfo();"/>

                        function getDateInfo()

{

                                    var date=new Date();

                                    //得到14天前的日期

                                    date.setDate(date.getDate()-14);

                                    alert(date.toLocaleDateString());//日期格式局限性

                                    //自己定义输出格式

                                    var year=date.getFullYear();

                                    var month=date.getMonth()+1;

                                    var d=date.getDate();

                                    alert(year+":"+month+":"+d);

}

7、函数与Function对象

函数(方法)是一组可以随时随地运行的语句。Function对象可以表示开发者定义的任何函数。

(1)函数的定义:

函数不能有返回类型,但是可以有返回值。

     a、function 函数名(参数){

      函数体;

      return 返回值;

        }

b、匿名函数

   var func = function(arg1,..,argN){

func_body;

return value;

   }

   对象的值(func)是方法对象,完全等价于function func(){}                           

c、可以使用Function对象直接创建函数

   var functionName = new Function(arg1,...,argN,functionBody);

   var add = new Function(“x”,”y”,”return (x+y);”);

   var result = add(2,3);

   alert(result); 5

                        alert(add);  弹出方法的文本

(2)函数的调用

M();

M(1,34);

var r = M(20);

(3)arguments对象

arguments是一种特殊对象,在函数代码中表示函数的参数数组。

函数默认是变长参数,可以使用arguments访问所有参数。

arguments.length          函数的参数个数

arguments[i]                 第i+1个参数

函数没有重载。 在javascript中,方法的名称相同,参数不同,前面的方法会被覆盖。

可以使用arguments模拟方法的重载

<script>

                                   var val = 5;          全局变量

                                function functionTest(){

                                           alert(val);            5

                                           var val1 = 6;        局部变量

                                        alert(val1); 6

                                           //函数调用测试, 传递变长参数

                                           alert(test());         0

                                           alert(test(1));       1

                                           alert(test(1,2,3,4));       10

                                           alert(test(1,"A",3,4));   "参数错误!"

                                    }

                                    //arguments对象, 是调用函数传递的参数数组

                                    //test函数: 对变长参数进行累计处理

                                    function test(){

                                           if(arguments.length==0){

                                                 return 0;

                                             }

                                           var sum=0;

                                           for(var i=0; i<arguments.length; i++){

                                                  //检查 参数 is Not a Number

                                                    if(isNaN(arguments[i])){

                                                            return "参数错误!";

                                                    }

                                                 sum+=arguments[i];

                                             }

                                           return sum;

                                     }

         </script>

8object对象

    object相当于java中的HashMap。主要用于封装

    eg:  var obj = new Object();  相当于 new hashMap()

         obj.name="小王";                  添加属性,后期动态绑定属性

         obj.age =20;                           相当于 map.put('age',20);

         alert( typeof obj);                  返回object类型

         alert( obj.name );           返回小王 相当于Map.get( "name" );

     3种方式创建对象(3种方式创建的对象没有任何区别)

     1、使用object

        var person1=new Object();

        person1.name="马伊琍";

        person1.age="32";

        alert(typeof  person1);          返回的是object类型

        alert(person1.name);                         相当于map.get("name");

   alert(person1.age);

   person1.whoau=function(){ alert(this.name);}

2、JSON方法,时髦一些(很常用的写法)

   var person2={

name:“文章”,

age:30,

whoau:function(){ alert(this.name)}

}

3、利用方法(相当于构造器)来创建对象

   <script>

                           function test(){

                                  var person3 = new Person("爱玛", 3);

                                  person3.whoau();

                           }

                           function Person(name, age){

                                  this.name = name;

                                  this.age = age;

                                  this.whoau = function(){alert(this.name);};

                           }

           </script>

        双色球演示

<head> 

<title> 双色球演示 </title> 

<script>

function doubleBall(){

var pool = ['01','02','03','04','05','06','07',

  '08','09','10','11','12','13','14','15',

  '16','17','18','19','20','21','22','23','24',

  '25','26','27','28','29','30','31','32','33'];

                                      var used = new Array(pool.length);

                       var balls = new Array(6);

    var i=0;

    while(true){

             var index=Math.ceil(Math.random()*100)%pool.length;

         if(used[index]){      continue;  }

         balls[i++] = pool[index];

         used[index]=true;

         if(balls.length==i){  break;  }

    }

    balls.sort();

    balls[balls.length] = pool[Math.ceil(Math.random()*100)%16];

    alert(balls);

}

</script>

</head>

<body> 

<input type="button" value="生成双色球号码" οnclick="doubleBall();">

         </body>

六、全局函数

  全局函数可用于所有内置的JavaScript对象

  常用的全局函数有:

  parseInt、parseFloat

  isNaN

  eval

  decodeURI、encodeURI

  (1)decodeURI、encodeURI

   encodeURI():把字符串作为URI进行编码

   decodeURI():对encodeURI()函数编码过的URI进行解码

            encodeURI(str):服务器不认识url中的中文,对其进行编码,编成服务器认识的格式

                  var str="http://tts6.tarena.com.cn/index.html?name=张三";

                     var r1=encodeURI(str);//http://tts6.tarena.com.cn/index.html?name=%E5%BC%A0%E4%B8%89

                     alert(r1);

                 var r2=decodeURI(r1);//http://tts6.tarena.com.cn/index.html?name=张三

   alert(r2);

  (2)eval函数

       eval函数用于计算某个字符串,以得到结果;或者用于执行其中的javascript代码。

  只接受原始字符串作为参数

  如果参数中没有合法的表达式和语句,则抛出异常。

  var str=”2+3”;

  alert(str);  2+3

  alert(eval(str));  5

  简单计算器

                  <input type="button" value="1" οnclick="cal(this.value);"/>

  参数this.value表示,点击该按钮时,把该按钮value属性对应的值传入方法中

                    <input type="button" value="2" οnclick="cal(this.value);"/>

                    <input type="button" value="3" οnclick="cal(this.value);"/>

                    <input type="button" value="4" οnclick="cal(this.value);"/>

                    <input type="button" value="+" οnclick="cal(this.value);"/>

                    <input type="button" value="-" οnclick="cal(this.value);"/>

                    <input type="button" value="*" οnclick="cal(this.value);"/>

                    <input type="button" value="/" οnclick="cal(this.value);"/>

                    <input type="button" value="=" οnclick="cal(this.value);"/>

  <input type="button" value="清空" οnclick="clear();"/>

                  function cal(s)

  {

                           var str=document.getElementById("txtNumber").value;

                           if(s=="="){

                                    var r=eval(str);

                                    document.getElementById("txtResult").value=r;

                           }else{

                                    document.getElementById("txtNumber").value=str+s;

                           }

  }  

  

七、DHTML

  1、简介

     DHTML是Dynamic HTML的简称,就是动态的,一种浏览器端的动态网页技术。

     对大多数人来说,DHTML 意味着 HTML、样式表和 JavaScript 的组合。 

     DHTMl功能:动态改变页面元素

   事件响应机制制作动态折叠的树形结构和菜单

   与用户进行交互等。

 DHTML对象模型包括浏览器对象模型和DOM对象模型。

  2、浏览器对象模型

     Window对象

|---History对象

|---Navigator对象

|---Location对象

|---Screen对象

|---Event对象

|---Document对象

|---Image对象

|---Table对象

|---Form对象等

  3Window对象

 Window对象表示浏览器中打开的窗口,窗口实现交互的功能

 (1)常用属性

window.document                 窗口中显示的HTML文档

window.history            浏览过窗口的历史记录

window.location           窗口文件地址

window.name = name                     窗口名称

window.operator          打开当前窗口的window对象

(2)弹出对话框

window.alert(str); 警告,提示对话框,显示str字符串的内容。

window.confirm(str);确认对话框,显示str字符串的内容。

   确认返回true,其他操作返回false。

window.prompt(str,value);输入对话框,采用文本框输入信息。

   str为提示信息,value为初始值。

   按确定返回输入值,其他返回underfined.

小技巧:取消事件

        onXXX = “return false;”用于取消事件。

                                         <input type="submit" value="删除" οnclick="return true;"/>点完后肯定会提交

<input type="submit" value="删除" οnclick="return false;"/>点了白点,不提交

模拟删除时,弹出对话框,确定时提交删除请求,取消时不发送请求。

<input type="submit" value="删除" οnclick="var r=delFunc();return r;"/>

<input type="submit" value="删除" οnclick="return delFunc();"/>

function delFunc()

{

         //默认情况下,点击确定或者取消都会刷新页面

         var r=window.confirm("真的要删除吗?");//true/false

var str=window.prompt("请输入3-5个字母");

alert(str);

         return  r;

}

(3)窗口的打开和关闭

类似于<a target=”_blank” href=””></a>

window.open(url,name,”width=500”);

<input type="button" value="打开新窗口" οnclick="window.open('http://tts6.tarena.com.cn',

'达内','width=500,height=300')">

(4)定时器

     a、周期性定时器

   var t = window.setInterval(exp ,time);每隔time毫秒,执行代码exp

 exp           执行语句

 time                   时间周期,单位为毫秒

  t             返回已经启动的定时器对象

   window.clearInterval(t);  停止启动的定时器

b、一次性定时器

   var t = window.setTimeout(exp,time);过time豪秒,执行代码exp

   window.clearTimeout(t);停止启动的定时器

c、案例

   (1)显示当前时间   启动时钟            停止时钟

                                       <input type="text" id="time"/>

                                          <input type="button" value="显示时间" οnclick="showTime();"/>

                                          <input type="button" value="启动时钟" οnclick="startClock();"/>

               <input type="button" value="停止时钟" οnclick="stopClock();"/>

                                           function showTime(){

                                                      var d=new Date();

                                                      document.getElementById("time").value=d.toLocaleTimeString();

}

var t1;

function startClock(){

                  t1=window.setInterval(showTime,1000);

}

function stopClock(){

                  window.clearInterval(t1);

}

   (2)撤销操作

                               <input type="button" value="5s后弹出" οnclick="timeoutFunc();">

         如果想取消,请点击<a href="javascript:cancleFunc();">这里</a>

     javascript表示,点击后不再跳转页面,而是执行javascript后面的脚本代码

     <a>中没有onclick事件

                              var t2;

function timeoutFunc(){

                                             t2=window.setTimeout("alert('hello')",5000);

}

function cancleFunc(){

         window.clearTimeout(t2);

}

  4Screen对象

     Screen对象包含有关客户端显示屏幕的信息。

     常用于获取屏幕的分辨率和色彩。

     常用属性:

     width/height                         返回显示器屏幕的宽/高

     availWidth/availHeight          返回显示屏幕的宽/高(windows任务栏除外)

     var    r = screen.height;       ok--read/get

     screen.height = 500;              error--不可设置

     window.width = screen.availWidth/2;

  5History对象

     history对象包含用户(在浏览器窗口)访问过的URL

     length属性:返回浏览器历史列表中的URL数量

     history.back()              加载history列表中的前一个URL          (单击后退按钮)

     history.forward()                  加载history列表中的下一个URL

     hostory.go(n)               加载history列表中某个具体页面

     history.go(-2)              单击两次“后退按钮”

  6location对象

     location对象包含有关当前URL的信息。常用于获取和改变当前浏览的网址。

     href属性

     var url = location.href;          获取当前页面的URL

     location.href = “a.html”;       修改当前访问的URL,保留历史访问记录(可以后退到原来页面)

     location.replace(url);             去往新url地址,没有历史(不能后退到原来页面)

     location.reload()                   重新加载当前网址,相当于按下刷新按钮

     ---可以实现页面跳转的方式(客户端)

     静态方式:<a></a>

     代码方式:       window.open()             一定是在新窗口中

history.XXX()             必须有历史记录

location.href                 是否需要保留

location.replace();        

  7navigator对象

     navigator对象包含有关浏览器的信息。常用于获取客户端浏览器和操作系统信息。

     只提供了可读的属性

     小技巧:查看某种对象的属性

     <input type="button" οnclick="testnavi();" value="遍历对象属性及值"/>

function testnavi(){

                           var str = "";

                           for(var pName in navigator){

//js中访问对象的属性有两种方式

                                    location.href

                                    location["href(变量)"]

                                    str +=pName+":"+navigator[pName]+"\n";

                           }

                           alert(str);

}

 8event对象与事件

    (1)事件:响应机制,当发生某种动作时实现对代码的调用。

         a、事件的分类

                      鼠标事件:

 onclick                       鼠标单击时发生

 ondbclick                   鼠标双击时发生

 onmousedown            鼠标按下

 onmouseup                鼠标按键松开

 onmouseover              鼠标移到某元素之上

 onmouseout               鼠标从某元素移开

键盘事件

 onkeydown                键盘按下

 onkeyup                    键盘弹起

 onkeypress                某个键盘按键被按下并松开

状态事件:

       onload                        onload事件会在页面或者图像加载完成后立即发生

          onunload                     用户退出页面(关闭页面)发生

 onchange                    域的内容改变时发生

 onfocus                      元素获得焦点时发生

 onblur                        元素失去焦点时发生

 onresize                     窗口或者框架被调整大小时触发

 onsubmit                    onsubmit事件会在表单中的确认按钮时发生

    b、事件的定义

                               取消事件: onXXX = “return false;”   点了和没点一样

html静态方式:<元素 onXXX=” someJavascriptCode ”>

js代码的方式: obj.onXXX = function(){...}

c、事件的冒泡机制

         当为层次关系的元素定义了相同的事件时,最底层的被触发,层层向上。

         当大量子节点拥有相同事件时,考虑将事件定义在父元素。

(2)event对象

     任何事件触发后将会产生一个evenet对象。

     event对象记录事件发生时的鼠标位置、键盘按键状态和触发对象等信息。

     常用属性:clientX/clientY  得到事件发生的位置点

     a、获得event对象

        IE/chrome等浏览器中,javascript和html都认识event

        firefox浏览器中:javascript不认识event对象,在html页面上认识。

        解决方案:在html中将event对象传入js

     b、获取事件的源元素对象(触发对象)

        IE/chrome等浏览器中,event.srcElement

   firefox浏览器中:event.target

   解决方案:二者用||连接起来

(3)浏览器兼容问题

     怎么考虑浏览器的兼容问题?

      a、写标准的代码(各个浏览器都支持的)

      b、个别的特殊问题,特殊处理,特别问题比较多,可以举例:如事件

      c、如果问到了某个特定的问题不会,可说:具体问题具体对待,遇到可以查询文档

(4)案例

a、冒泡机制

                                 <div style="border:1px solid black;width:200px;height:200px;" οnclick="alert('div');">

                                             <p style="border:1px solid green" οnclick="alert('p');">

                                                      aa

                                                      <input type="button" value="click me" οnclick="alert('button');">

                                             </p>

</div>

当点击button时,p和div里的onclick事件也被触发

b、改进版的简单计算器

   <div style="border:1px solid black;"  οnclick="cal(event);">

                  <input type="button" value="1" />

                  <input type="button" value="2" />

                  <input type="button" value="3" />

                  <input type="button" value="4" />

                  <input type="button" value="+" />

                  <input type="button" value="-" />

                  <input type="button" value="=" />

                  <br />

                  <input type="text" id="txtNumber" />

  </div>

                           function cal(eObj){

                                    var obj=eObj.target||eObj.srcElement;;

                                    if(obj.nodeName=="INPUT"&&obj.type=="button"){

                                             if(obj.value=="="){

                                                      var str=document.getElementById("txt").value;

                                                      var result=eval(str);

                                                      document.getElementById("txt").value=result;

                                             }else{

                                                      document.getElementById("txt").value+=obj.value;

                                             }

                                    }

 }

八、HTML DOM

 1HTML DOM简介

         DOM 是Document Object Model(文档对象模型)的缩写,定义了如何将一个结构化的文档(比如xml, html)转换成一棵树,并且也定义了如何操作这棵树的方法或者属性。根据W3C DOM规范,DOM是一种与,平台,语言无关的接口。(一堆API)。

         HTML DOM则是专门使用于html/xhtml的文档对象模型。可以理解为网页的API,它将网页中的各个元素都看作一个个对象。封装了元素的属性和对元素进行操作的方法。javascript可以利用HTML DOM动态的修改页面。(将html标记、属性、CSS样式都对象化)。

HTML也是讲一些常见的DOM操作(document的一些方法)进行封装。

我们要学习的就是这些对象的属性和方法。

这些对象主要有:

document对象

    |---Button对象

    |---Form对象

|---Input对象

|---Select对象

|---Textarea对象

|---Table对象

|---Style对象(样式)

2、HTML DOM模型

        HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树,都是节点)。

        页面:

                 <html>

                         <head>

                               <title>DOM 演示</title>

                         </head>

                         <body>

                               <div>

                                        <!-- 开始演示 -->

                                        <a href="index.html">Home<a>

                                        <h1 id="title">Dom 演示页面</h1>

                               </div>

                         </body>

</html>

        在浏览器中会生成如下结构的DOM对象(元素继承于节点   元素是节点)

document

                           |--根元素html

                              |-- 元素head

                              |    |-- 元素title

                              |             |-- 文本节点 "DOM 演示"

                              |-- 元素body

                                  |-- 元素div

                                             |-- 注释节点

                                             |-- 文本节点 "开始演示"

                                                     |-- 元素 a

                                                            |-- 属性节点 href="index.html"

                                                            |-- 文本节点 Home

                                                     |-- 元素 h1

                                                           |-- 属性 id="title"

                                                           |-- 文本节点 "Dom 演示页面"

              跟元素: root Element

元素: Element

节点: Node

文本节点: text Node

属性: Attribute

注释: Comment

Node 根类型

                          |-- Element (Note Type = 1)

                          |-- Text Node (Note Type = 3)

                          |-- Attribute Node (Note Type = 2)

                          |-- Comment (Note Type = 8)

父节点:parent           孩子节点:child

兄弟(同辈):sibling 祖先(父亲以上)             

后代:孩子以下都是

九、Document对象(重点)

     1、简介

        每个载入浏览器的HTML文档都会成为document对象。

        通过使用document对象,可以从脚本中对html页面中的所有元素进行访问。

       (把所有元素都封装成对象,可以通过访问对象的属性和方法来访问元素)

        document对象时window对象的一部分,可以通过window.document属性对其进行访问。

                2、查找节点

   (1)var obj = document.getElementById(“id值”)

   根据id值返回对应的元素对象。返回只可能是1个

   (2)var nodes = document.getElementsByTageName(“a”)

   根据标签的名称查找,返回的时节点的数组。

   如果标签名称错误,则返回长度为0的节点数组。

   document.getElementsByTageName  查找范围是整个HTML文档中的所有元素。

         node.getElementsBtTagName("a");在node的所有后代中查找所有元素“a”。

   (3)使用节点导航(父子关系导航):有些浏览器不兼容,不常用

          所有节点包含的属性:

obj.parentNode            返回父节点

obj.childNodes             返回数组,包含所有子节点

obj.firstChild

obj.lastChild

obj.previousSibling       返回同级别,前一个兄弟

obj.nextSibling              返回同级别,后一个兄弟

3、查看节点信息

                    (1)适用于节点类型未知

        var str=obj.nodeName    返回节点的名称,注意返回的str是全大写方式。

         如果节点是input类型,返回INPUT

   (2)适用于节点类型已知

        a、标签对象化

           文本框 <input value=”” />

           查看value属性:var str = obj.value;//obj是文本框对象

      修改vlaue属性:obj.value = str;

  图像 <img src=”’>

查看src属性:var str = obj.src;

      修改src属性:obj.src = str;

  链接 <a href=””>XXX</a>

查看href属性:var str = obj.href;

      修改href属性:obj.href = str;

b、标签中间的文本

   查看:var str = obj.innerHTML

   修改:obj.innnerHTML=str;

c、单个样式

   obj.style.color = ”red”

   obj.style.backgroundColor = ”silver”

   obj.style.fontSize = 30;

d、样式比较复杂的

   JS: h1Obj.className=”s1” 修改h1的class属性的值

                  CSS: h1.s1{XXX}

                   HTML <h1>text</h1>

4、创建新节点

   (1)var obj=document.createElement(elementName);

         elementName:要创建的元素标签名称。返回新创建的节点

         var newNode = document.createElement(“input”);

newNode.type = “text”;

newNode.value = “mary”;

newNode.style.color = “red”;

        (2)var newTextNode=document.createTextNode(text);

    创建文本节点

    var para = document.createElement(p);

    var node = document.createTextNode(“这是新段落”);

    para.appendChild(node);

5、添加新节点

        (1)parentNode.appendChild(newNode);

        追加:新节点作为父节点的最后一个子节点存在

   (2)parentNode.insertBefore(newNode,refNode);

        refNode:参考节点,新节点位于此节点之前

   (3)newElement替换refNode,  node是父节点

             node.replaceChild(newElement, refNode)

    6、删除节点

       parentNode.removeChild(childNode);                   删除某个子节点

  obj.parentNode.removeChild(obj);                    删除obj

十、Table对象

  属性:

var arry = table.rows;   返回所有行        相当于table.getElementsByTagName("tr")

var arry = table.cells;

  方法:

table.insertRow(index)                   在index下标处插入一行

tableObject.deleteRow(index)         删除下标为index的行

TableRow对象

         ableRow.deleteCell(index)     删除下标为index的td

tableRow.insertCell(index)    在下标index处添加一个单元格

  案例:保存数据添加到表格中

              产品名称:<input type="text" id="txtName"/><br/>

                     产品价格:<input type="text" id="txtPrice"><br/>

                     <input type="button" value="保存" οnclick="saveData();"/>

                 <table id="t1" border="1" width="50%">

                                    <tr><td>名称</td><td>价格</td></tr>

                                    <tr><td>a</td><td>12.2</td></tr>

                     </table>

                  function saveData(){

                           var table=document.getElementById("t1");

                           var row=table.insertRow(table.rows.length);

                           var cell1=row.insertCell(0);

                           cell1.innerHTML=document.getElementById("txtName").value;

                           var cell2=row.insertCell(1);

                           cell2.innerHTML=document.getElementById("txtPrice").value;

  }

十一、Select对象

   Select对象代表HTML表单中的一个下拉列表。<select>标签即表示一个Select对象。

     常用属性

var options = selectObj.options              返回包含下拉列表中的所有选项的一个数组

var index = selectObj.selectedIndex         返回下拉列表中被选项目的索引号

selectObj.selectedIndex = xxx                  设置被选项目

var s = selectObj.size                              设置或返回下拉列表中的可见行数。

var l = selectObj.length                            返回下拉列表中的选项数目。

方法

selectObject.add(option,before)              向 <select> 添加一个 <option> 元素。

option        要添加的option对象

before         在该元素之前增加新的元素。如果是null,元素添加到选项数组的末尾。

selectObject.remove(index)                     删除索引号为index的option对象

事件

selectObject.onchange = “someJavascriptCode”;

当用户选中一个选项,或者取消了对一个选项的选定时,就会调用该句柄。

Option对象

Option对象代表HTML表单中下拉列表中的一个选项。

<option>标签表示一个Option对象

创建对象

var o = new Option(text , value);  第一个参数是option的innerHTML,

第二个参数是option的value值。

 

属性

optionObject.index                   返回下拉列表中选项的索引位置。

optionObject.text=sometext           可设置或返回选项的文本值。

optionObject.value=somevalue     可设置或返回选项的值

optionObject.selected=true|false    设置或返回选项的 selected 属性的值

selectObject.options[]  返回包含 <select> 元素中所有 <option> 的一个数组。

如果把 options.length 属性设置为 0,Select 对象中所有选项都会被清除

案例:联动菜单

                           <form action="" id="form1">

方向:

                                             <select id="s1" οnchange="showOption();">

                                                      <option>--请选择--</option>

                                                      <option>Java</option>

                                                      <option>C++</option>

                                                      <option>PHP</option>

                                             </select>

                                        课程:

                                             <select id="s2">

                                             </select>

</form>

  JS

                            var ary=new Array();

                                  ary[0]=["--请选择--"];

                                  ary[1]=["corejava","se","oracle"];

                                ary[2]=["c","c++"];

                                ary[3]=["html","css","php"];

                                     function change(){

                                             var s1Obj = document.getElementById("s1");

                                             var s2Obj = document.getElementById("s2");

                                             var index = s1Obj.selectedIndex;

                                             var data = ary[index];

                                             s2Obj.length = 0;

                                             for(var i=0;i<data.length;i++){

                                                      var optObj = new Option(data[i]);

                                                      s2Obj.add(optObj);

                                             }

         }

十二、DOM案例

    1、查看节点信息,修改节点信息(节点类型已知)

       html文件

                                           <head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript" src="day02.js"></script>

<style type="text/css">

                                                               .s{

                                                                        border:1px solid red;

                                                                        height:30px;

                                                               }

                                                               .h{

                                                                        border:1px solid green;

                                                                        width:300px;

                                                               }

</style>

</head>

<body>

                  <form>

                                                               <p id="p1">修改段落的字体颜色、背景颜色、文本</p>

                                                               <img id="m1" src="images/account_out.png">

                           <h1 id="h1" class="s">复杂的样式</h1>

                           <input type="button" value="节点" οnclick="testDOM();"/>

                  </form>

</body>

 js文件

      function testDOM()

       {

                                                      var pObj=document.getElementById("p1");

                                                      pObj.style.color="yellow";

                                                      pObj.style.backgroundColor="gray";

                                                      pObj.style.border="1px solid black";

                                                      pObj.style.height="30px";

                                                      pObj.style.width="500px";

var imgObj=document.getElementById("m1");

                                                      imgObj.src="images/admin_out.png";

                                                      var hObj=document.getElementById("h1");

                                                      hObj.className="h";

}

           2、查看节点信息(节点类型未知)

                统计option个数

                         <select id="s1">

                    <option>aa</option>

                    <option>bb</option>

                    <option>cc</option>

                </select>

                <input type="button" value="统计" οnclick="testNode();"/>

                function testNode()

{

                                             var obj=document.getElementById("s1");

                                             var nodes=obj.childNodes;

                                             alert(nodes.length);//长度为7,空白文本也算一个节点。

                                             var count=0;

                                             for(var i=0;i<nodes.length;i++){

                                                      if(nodes[i].nodeName=="OPTION"){

                                                               count++;

                                                      }

                                             }

alert(count);

}

       

3、表单验证(查找节点)

                           姓名:<input type="text" id="txtName" οnblur="validName();">

<span id="nameInfo">3-5个大小写字母</span><br>

                          年龄:<input type="text" id="txtAge" οnblur="validAge();">

                       <span id="ageInfo">2位数字</span><br>

             <input type="submit" value="保存" οnclick="return validData();"/>

   JS

                                 function validName()

{

                                             var name=document.getElementById("txtName").value;

                                             var reg=/^[a-zA-Z]{3,5}$/;

                                             if(reg.test(name)){

                                                      document.getElementById("nameInfo").style.color="green";

                                             }else{

                                                      document.getElementById("nameInfo").style.color="red";

                                             }

                                             return reg.test(name);

}

function validAge(){

                                             var age=document.getElementById("txtAge").value;

                                             var reg=/^[0-9]{2}$/;

                                             if(reg.test(age)){

                                                      document.getElementById("ageInfo").style.color="green";

                                             }else{

                                                      document.getElementById("ageInfo").style.color="red";

                                             }

                                             return reg.test(age);

}

点击保存时,要求所有表单都通过验证

function validData(){

                                             var r1=validName();

                                             var r2= validAge();

                                             return r1&&r2;

}

4、增加节点

<form id=”form1”>

<input type="button" οnclick="addNewNode();" value="增加节点">

<form>

                                 function addNewNode(){

                                             var aObj=document.createElement("a");

                                             aObj.href="http://tts6.tarena.com.cn";

                                             aObj.innerHTML="click me";

                                             var formObj=document.getElementById("form1");

                                             formObj.appendChild(aObj);

        

                                             var btnObj=document.createElement("input");

                                             btnObj.type="button";

                                             btnObj.value="new Button";

                                             //onclick接受的是方法

                                             btnObj.οnclick=function(){

                                                      alert("hello");

                                             };

                                             formObj.insertBefore(btnObj,formObj.firstChild);

}

5、联动菜单

                                 <form action="" id="form1">

方向:

                                             <select id="s1" οnchange="showOption();">

                                                      <option>--请选择--</option>

                                                      <option>Java</option>

                                                      <option>C++</option>

                                                      <option>PHP</option>

                                             </select>

                                        课程:

                                             <select id="s2">

                                             </select>

</form>

JS

var ary=new Array();

ary[0]=["--请选择--"];

ary[1]=["corejava","se","oracle"];

ary[2]=["c","c++"];

ary[3]=["html","css","php"];

function showOption(){

                                             var obj=document.getElementById("s1");

                                             var obj2=document.getElementById("s2");

                                             var index=obj.selectedIndex;

                                             var data=ary[index];

                                             var nodes=obj2.childNodes;

                                             //alert(nodes.length);

                                             //for(var i=0;i<nodes.length;i++){//nodes.length会改变,for循环不可用

                                                      //alert(i);

                                                      //obj2.removeChild(nodes[0]);

                                             //}

                                             while(nodes.length>0){

                                                      obj2.removeChild(nodes[0]);

                                             }

                                             for(var i=0;i<data.length;i++){

                                                      var opt=document.createElement("option");

                                                      opt.innerHTML=data[i];

                                                      obj2.appendChild(opt);

                                             }

}

6、购物车

   html

                        <body>

                                    <h1>购物车</h1>

                                    <table id="t1" border="1px solid black" width="50%" cellpadding="0" cellspacing="0">

                                             <tr>

                                                      <td>名称</td>

                                                      <td>价格</td>

                                                      <td>数量</td>

                                                      <td>小计</td>

                                             </tr>

                                             <tr>

                                                      <td>aa</td>

                                                      <td>10.21</td>

                                                      <td>

                                                               <input type="button" value="-" οnclick="decrease(this);"/>

                                                               <input type="text"/>

                                                               <input type="button" value="+" οnclick="add(this);">

                                                      </td>

                                                      <td>10.21</td>

                                             </tr>

                                             <tr>

                                                      <td>bb</td>

                                                      <td>3.4</td>

                                                      <td>

                                                               <input type="button" value="-" οnclick="decrease(this);"/>

                                                               <input type="text"/>

                                                               <input type="button" value="+" οnclick="add(this);">

                                                      </td>

                                                      <td><span>3.4</span></td>

                                             </tr>

                                    </table>

                                    总计:<span id="total">13.61</span>

</body>

Javascript

function add(btnObj){

                                    var nodes=btnObj.parentNode.childNodes;

                                    for(var i=0;i<nodes.length;i++){

                                             var child=nodes[i];

//先判断节点名,因为可能会有空白节点

                                             if(child.nodeName=="INPUT"&&child.type=="text"){

                                                      var old=parseInt(child.value);//得到的值一定是字符串

                                                      old++;

                                                      child.value=old;

                                             }

                                    }

                                    getPrice();

}

 

function decrease(btnObj){

                                    var nodes=btnObj.parentNode.childNodes;

                                    for(var i=0;i<nodes.length;i++){

                                             var child=nodes[i];

                                             if(child.nodeName=="INPUT"&&child.type=="text"){

                                                      var old=child.value;

                                                      if(old > 0){

                                                               old--;

                                                      }

                                                      child.value=old;

                                             }

                                    }

                                    getPrice();

}

 

function getPrice(){

                                    var obj=document.getElementById("t1");

                                    var rows=obj.getElementsByTagName("tr");

                                    var total=0;

                                    for(var i=1;i<rows.length;i++){

                                             var currentRow=rows[i];

                                             var cells=currentRow.getElementsByTagName("td");

                                             var price=parseFloat(cells[1].innerHTML);

                                             //第三个单元格

                                             var inputs=cells[2].getElementsByTagName("input");

                                             var qty=parseInt(inputs[1].value);

                                             var sum=price*qty;

                                             cells[cells.length-1].innerHTML=sum;

                                             total+=sum;       

                                    }

                                    document.getElementById("total").value=total;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/qin-derella/p/6553680.html

你可能感兴趣的文章
BeanShell简介
查看>>
python字符串操作
查看>>
不同程序语言的注释和变量要求
查看>>
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
跟着辛星用PHP的反射机制来实现插件
查看>>