JavaScript&JQuery

1 javascript

1.1 javascript基础

  • 什么是javascript

JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。 [1]

JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。 [2]

JavaScript的标准是[ECMAScript ](https://baike.baidu.com/item/ECMAScript /1889420?fromModule=lemma_inlink)。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES2015。 [1]

  • js运行在浏览器端的编程语言,用来解决用户和浏览器之间的交互问题。
1.1.1 js的语法
  • 第一种写法:内部写法,在script标签中定义js代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
   <div></div>
</body>
<script type="text/javascript">
   alert("hello,javascript"); //弹框函数,在浏览器窗口弹出一个框
</script>
</html>
  • 第二种写法:行内写法,可以在HTML标签的内部去写js代码
<body>
   <!-- onclick 单击这个按钮会触发的js代码 -->
   <input type="button" value="点击" onclick="alert('hello world....')">
</body>
  • 第三种写法:外部写法,可以在外部定义独立的js文件,我们只需要在对应HTML页面内部引入js文件即可。
<script type="text/javascript" src="js/common.js">
</script>

定义js代码需要注意的事项:

  1. 在HTML中,script标签可以出现多对。
<script type="text/javascript"  src="js/common.js">
  
</script>

<script type="text/javascript">
  alert("hello,javascript"); //弹框函数,在浏览器窗口弹出一个框
</script>
  1. 如果script标签引入了外部的js文件,那么不能在当前的script标签中定义内部的js代码了。如果确实想要定义内部的js代码,需要重新定义新的script标签,在新的script标签中定义js代码。
<script type="text/javascript" src="js/common.js">
   alert("hello,javascript"); //弹框函数,在浏览器窗口弹出一个框
</script>
这种写法不对,外部的js代码会生效,但是内部的js代码不会生效。
  1. script标签中的type="text/javascript"属性可以不写,但是一般我们最好带上,因为我们目前的文件是HTML5文件,这样写是遵循HTML5的标准和规范。
<script src="js/common.js">
</script>
  1. 目前我们最好把script标签放在body标签的后面,因为浏览器解析HTML文件是按照自上而下的方式解析的(瀑布式的加载),如果我们要操作body里面的标签,需要现在加载这些标签元素才能进行对应的js操作。
1.1.2 js变量

变量:变量用来存储数据的容器。

基本格式:var 变量名称 = 值;

<script type="text/javascript">
  // var 变量名称 = 值
  var num = 23;
  console.log("num1的值是:" + num);
  var str = "hello";
  console.log("str的值是:" + str);
  var flag = true;
  console.log("flag的值是:" + flag);
  var money = 3.14;
  console.log("money的值是:" + money);
  //也可以一次性的声明多个变量
  var num1,num2,num3;
  num1 = 11;
  num2 = 12;
  num3 = 13;
  console.log("num1的值是:" + num1 + "num2的值是:" + num2 + "num3的值是:" + num3);
  //声明字符串类型的变量,单引号双引号都可以.
  var username = 'eric';
  console.log("username的值是:" + username);
  //在声明变量的时候,var关键字也可以省略
  sname = "李四";
  console.log("sname的值是:" + sname);
  //在给变量重新的赋值的时候,我们不要考虑变量的数据类型
  var age = 12;
  age = "19";
  console.log("age的值是:" + age);
</script>

使用变量需要注意的事项:

  1. 变量的名称一定要有意义。
  2. 变量名称一般小写。
  3. 变量名称要遵循驼峰命名规则。
  4. 变量名称不要使用关键字

案例:使用js变量实现两个数字之间的交换

<script>
   var a = 12;
   var b = 23;
   var temp;
   var temp = a;
   var a =  b;
   var b = temp;
   document.write("a的值是:" + a + "<br>"); //向浏览器页面输出一些内容,这些内容既可以是纯文本也可以是html类型的文本
   document.write("b的值是:" + b + "<br>");
</script>
<script>
   var a = 12;
   var b = 23;
   var a = a + b; // a = 35
   var b = a - b; // b = 35 - 23 = 12
   var a = a - b; // a = 35 - 12 = 23
   document.write("a的值是:" + a + "<br>"); 
   document.write("b的值是:" + b + "<br>");
</script>
1.1.3 js的注释

js中的注释有两种,一种是单行注释,一种是多行注释。

单行注释: // 注释内容

多行注释:/*注释内容*/

<script>
   var a = 12;
   var b = 23;
   var a = a + b; // a = 35
   var b = a - b; // b = 35 - 23 = 12
   var a = a - b; // a = 35 - 12 = 23
   document.write("a的值是:" + a + "<br>");
   document.write("b的值是:" + b + "<br>");
   
   /*
    多行注释的效果
    console.log(a);
    console.log(b);
   */
    
   <!-- html注释的内容 --> 
   
   /*css的注释内容*/

   // js的单行注释

   /*
     js的多行注释
  */
</script>
1.1.4 js变量的数据类型

在javascript中,变量的数据类型有很多种:

number: 数字类型包括整数还有小数。

string:字符串类型,字符串类型的值使用双引号和单引号都可以。

boolean:布尔值类型(true false)。

object:一个对象的类型。

undefined:未被定义的类型,如果一个变量声明不赋值就是undefined类型。

null: 变量的值为null。

如何获取变量的数据类型? 通过typeof函数可以查看变量的数据类型。

<script type="text/javascript">
    var num = 10;
    var price = 3.14;
    var username = "eric";
    var result = true;
    var o = new Object();
    var person;
    var str = null;
    console.log(typeof num);
    console.log(typeof price);
    console.log(typeof username);
    console.log(typeof result);
    console.log(typeof o);
    console.log(typeof person);
    console.log(typeof str);
</script>
1.1.4.1 number类型
  • 不管是整数还是小数,都可以使用number来描述。
  • number是有范围的。
<script type="text/javascript"> /** number类型 */
    var nub1 = 12
    nub2 = 1.111
    document.write(typeof nub1+"<br>")
    document.write(typeof nub2+"<br>")
    console.log("Number类型的最小值:"+Number.MIN_VALUE)
    console.log("Number类型的最大值:"+Number.MAX_VALUE)
    document.write(Number.MAX_SAFE_INTEGER)
</script>
  • 判断变量是否是数字 isNaN()
<script> /** 判断变量是否是数字--isNaN(变量)  <Not a Number> */
    var name ="eric";
    document.write("<br>"+name+"不是一个数字isNaN():"+isNaN(name));
    age ='90';
    document.write("<br>"+age+"不是一个数字isNaN(age):"+isNaN(age));
    score = 18;
    document.write("<br>"+score+"不是一个数字isNaN(score):"+isNaN(score))</script>
  • ==号的问题

如果两个操作数相等,则返回 true。在比较时,相等操作符会先转换操作数(通常称为强制转型),然后比较它们的相等性。

  1. 如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值;
console.log(false == 0);//true 如果有一个操作数是布尔值,则在比较相等性之前,将其转换为数值. true = 1  false = 0
console.log(true == 1);// true
  1. 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值;
var num1 = 55;
var num2 = "55";
console.log(num1 == num2); //true 如果一个操作数是字符串,另一个操作数是数值,在比较之前先将字符串转换为数值.
  1. 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较;
/** object对象进行比较时会调用对象的valueOf()方法,得到的基本类型值在进行比较 */
    var o = new Object(33);
    var num4 = 33;
    document.write(o==num4);

    var ob = new Object(332);
    document.write("<br>"+typeof ob);
    document.write(ob);
    ob = 45; //会变成number类型
    document.write("<br>"+typeof ob);
  1. 如果有一个操作数是 NaN,无论另一个操作数是什么相等操作符都返回 false;
console.log(NaN == NaN);//false  如果有一个操作数是 NaN,无论另一个操作数是什么,相等操作符都返回 false.
  1. 如果两个操作数都是对象,则比较它们是不是同一个对象。如果指向同一个对象,则相等操作符返回 true;
/** Object之间使用==;非基本数据类型之间比较地址  */
    var obj1 = new Object("Hello");
    var obj2 = new Object("Hello");
    document.write(obj1==obj2); //false
    var obj3 = obj1
    document.write(obj3==obj1); //ture
      /** ture:Object与基本数据类型比较时,会调用valueOf()自动转型后==比较 */
    var strobj = 'Hello';
    document.write(strobj==obj2); //true
  1. null 和 undefined 是相等的。
console.log(null == undefined);// true
  1. 一些特殊请情况
console.log([] == []);//false 两个空的数组对象是否相等
console.log({} == {});//false 比较两个空对象是否相等
1.1.4.2 string类型
  • 给字符串变量赋值,可以使用双引号,也可以使用单引号。
<script type="text/javascript">
    var name = "eric";//双引号
    var message = 'hello';//单引号
</script>
  • 描述字符串的长度使用length属性。
<script type="text/javascript">
    var message = 'hello';//单引号
    document.write("字符串的长度:" + message.length)
</script>
  • js中特殊的字符的描述。
<script type="text/javascript">
    var name = "eric";//双引号
    var message = 'hello';//单引号
    document.write("字符串的长度:" + message.length)
    console.log("abc\nefg");// \n 换行的意思
    console.log("abc\tefg");// /t 就是制表符
    console.log("abce\"fg");// \" 转义双引号
    console.log("abce\'fg");// \" 转义单引号
</script>
  • 在js字符串中,也可以使用+号对字符串的内容进行拼接。
console.log("hello" + "world");
console.log("100" - 99);// 1
1.1.5 js数据类型的转换
1.1.5.1 其他类型转换成数字类型
  • 我们可以通过parseInt(“str”)将其他数据转换成整数类型。
console.log(parseInt("10")); // 10
console.log(parseInt("10abc"));//10
console.log(parseInt("abc10"));//NaN
console.log(parseInt("1abc123"));//1
console.log(parseInt("3.14165926"));//3
console.log(parseInt("3.14abc"));//3
  • 将字符串转换成小数 parseFloat(“str”)
console.log(parseFloat("10"));
console.log(parseFloat("10abc"));//10
console.log(parseFloat("10.123"));//10.123
console.log(parseFloat("10.123abc"));//10.123
console.log(parseFloat("1ac0.123abc"));//1
console.log(parseFloat("10.1erf2abc"))//10.1
  • 将字符串转换成数字 Number(“str”)
console.log(Number("10"));//10
console.log(Number("10abc"));//NaN
console.log(Number("abc10"));//NaN
console.log(Number("1abc20"));//NaN
console.log(Number("10.2345"));//10.2345
console.log(Number("10.2345abc"));//NaN
1.1.5.2 其他类型转换成字符串类型

将其他数据类型转换成字符串的方式有两种:

toString()

String()

var num = 30;
console.log(num.toString() + "转换之后的数据类型:" + typeof num.toString());
var num1 = 30;
console.log(String(num1) + "转换之后的数据类型:" + typeof String(num1));
1.1.5.3 其他类型转换成布尔值

Boolean()

console.log(Boolean(1));// true  非0的数字
console.log(Boolean(3.14));// true  非0的数字
console.log(Boolean(0));// false  为0位false
console.log(Boolean(-11));// true 非0的整数
console.log(Boolean(11));// true 非0的整数
console.log(Boolean("hello"));// true 非空字符串为true
console.log(Boolean(null));// false
1.1.6 运算符
1.1.6.1 算术运算符

常见的算术运算符有:+ - * / % ++ – += -=

<script type="text/javascript">
    var a = 10;
    var b = 3;
    document.write("a + b = " + (a + b) + "<br>");
    document.write("a - b = " + (a - b) + "<br>");
    document.write("a * b = " + (a * b) + "<br>");
    document.write("a / b = " + (a / b) + "<br>");// 不是取商,而是取整个结果
    document.write("a % b = " + (a % b) + "<br>");
</script>
/*
 * 如果++在num后面,就是先赋值 后运算。
 * 如果++在num前面,就是先运算 后赋值。
 */
<script type="text/javascript">
    var num = 10;
    console.log(num++);// num++ 10   num = 11
    console.log(++num);// ++num = 12
    console.log(num);
</script>
1.1.6.2 比较运算符

常见的比较运算符: < > >= <= == != ===

<script type="text/javascript">
    var a = 10;
    var b = 3;
    document.write("a和b的比较结果是:" + (a > b) + "<br>");
    document.write("a和b的比较结果是:" + (a < b) + "<br>");
    document.write("a和b的比较结果是:" + (a == b) + "<br>");
    document.write("a和b的比较结果是:" + (a != b) + "<br>");
    var c = "7";
    document.write("a和c的比较结果是:" + (a > c) + "<br>");
    document.write("a和c的比较结果是:" + (a > c) + "<br>");
    var d = 7;
    // == 比较两个数据的值是否相等,如果数据不一样,会将对应数据转换成数字之后再比较。
    document.write("c==d的结果是:" + (c == d) + "<br>");// true
    // ===  不仅要比较两个数值的值是否相等,还有比较两个数值的数据类型是否相等。
    document.write("c===d的结果是:" + (c === d) + "<br>");// false
</script>
1.1.6.3 逻辑运算符

在javascript中,描述逻辑运算符的是&& ||

document.write((a > b) && (b < d) + "<br>");// true
document.write((a < b) && (b < d) + "<br>"); // false
document.write((a < b) || (b < d) + "<br>");// true

&&:表达式1 && 表达式2

只有表达式1和表达式2同时为true。整个表达式才为true。

||:表达式1 || 表达式2

只要表达式1和表达式2中任意一个表达式为true。整个表达式就为true。

注意:在js中描述逻辑运算符的只有&& 或者||。没有& |。

1.1.6.4 三元运算符

格式: 表达式 ?结果1 : 结果2

表达式为true,则取结果1的值。表达式为false,则取结果2的值。

var age = 23;
document.write((age > 18) ? "成年人" : "未成年");
1.1.7 js中的流程控制语句
1.1.7.1 if语句
  • 单if语句

语法格式:

if(条件){
    满足条件需要执行的代码
}
<script type="text/javascript">
    var age = 28;
    if(age > 18){
        document.write("年龄是:" + age + "岁,是成年人" + "<br>");
    }
</script>
  • if-else语句

语法格式:

if(条件){
    满足条件需要执行的代码
}else{
    不满足if条件需要执行的代码
}
<script type="text/javascript">
    var age = 8;
    if(age > 18){
        document.write("年龄是:" + age + "岁,是成年人" + "<br>");
    }else{
        document.write("年龄是:" + age + "岁,是未成年人" + "<br>");
    }
</script>
  • if-else if …else语句

语法格式:

if(条件表达式){
语句
}else if(条件表达式){
语句
}else if(条件表达式){
语句
}else{
语句
}
<script type="text/javascript">
    var score = 88;
    if(score >=90){
        document.write("分数是:" + score + ",成绩优秀" + "<br>");
    }else if(score >= 80){
        document.write("分数是:" + score + ",成绩良好" + "<br>");
    }else if(score >= 60){
        document.write("分数是:" + score + ",成绩合格" + "<br>");
    }else{
        document.write("分数是:" + score + ",成绩不合格" + "<br>");
    }
</script>
1.1.7.2 switch语句

switch语句一般用来做等值判断。

语法格式:

switch(值){
   case 值1:
       满足case条件需要执行的代码;
       break;
   case 值2:
       满足case条件需要执行的代码;
       break;
   ......
   default:
      不满足以上所有case语句要执行的代码;
      break;
}

注意:break关键字用于跳出switch,即当break语句执行,下面的switch语句将会跳过。

num=2;
switch(num){
    case 1:
        console.log("星期一");
        break;
    case 2:
        console.log("星期二");
        break;
    case 3:
        console.log("星期三");
        break;
    case 4:
        console.log("星期四");
        break;
    case 5:
        console.log("星期五");
    case 6:
        console.log("星期六");
    case 7:
        console.log("星期日");
    default:
        console.log("非法数字~~");
}
1.1.7.3 循环语句之while循环

while循环的语法格式:

while(条件表达式){
	满足条件需要执行的语句
}
while(true){
    document.write("hello");
    break; //跳出当前的while循环
}
// 输出0-100之间的数字
var i = 0;
while(i <=100){
    console.log(i);
    i ++;
}
//输出1-100之间的和
var i = 0;
var total = 0;
while(i <=100){
    total =  total + i;
    i ++;
}
console.log(total);
1.1.7.4 循环语句之do-while

do-while循环,先执行一次循环操作,然后再去判断循环条件。

语法格式:

do{
   循环体
}while(循环条件);
var i = 0;
do{
    console.log(i);
    i++;
}while(i<=100);
1.1.7.5 for循环

语法格式:

for(循环条件){
	满足循环条件需要执行的代码;
}
var total = 0;
for(var i = 0;i<=100;i++){
    if(i % 2 == 0){
        total = total + i;
    }
}
console.log(total);
1.1.7.6 循环中碰到的几个关键字 break continue
  • break关键字

在循环中使用break关键字,表示立即终止循环操作。如果在case语句中使用break关键字,表示立即跳出case语句。

需求:找到100-200之间第一个被7整除的数字。

for(var i = 100;i <= 200;i++){
    if(i % 7 == 0){
        console.log(i);
        break;// 跳出for循环,不再执行循环操作
    }
}
  • continue关键字

在循环中使用continue关键字,表示终止本次循环,回到循环起始条件处,准备开始下一次循环操作。

案例:求100-200之间所有的奇数之和

var sum = 0;
for(var i = 100;i <= 200;i++){
    if(i % 2 == 0){
        continue;
    }
    sum  = sum + i;
}
document.write("100-200之间的所有奇数之和是:" + sum);

1.2 javascript中的数组和函数

1.2.1 js数组

数组是用来保存数据的容器,我们可以通过数组批量的存储数据。如何创建数组?

第一种:通过字面量的方式创建数组(推荐)

<script type="text/javascript">
    var arr = []; //创建的是一个空数组
    var arr1 = [12,34,56,78,90];
    console.log(arr1);
</script>

第二种:通过构造函数创建数组

<script type="text/javascript">
    var arr2 = new Array(3);
    arr2[0] = 11;
    arr2[1] = 22;
    arr2[2] = 33;
    console.log(arr2);
</script>

数组的长度:通过length属性去描述

<script type="text/javascript">
    var arr1 = [12,34,56,78,90];
    console.log(arr1.length);
</script>

我们也可以通过数组的下标或设置或获取数组中的元素。数组的下标从0开始。

<script type="text/javascript">
    var arr1 = [12,34,56,78,90];
    var arr2 = new Array(3);
    //通过下标设置数据
    arr2[0] = 11;
    arr2[1] = 22;
    arr2[2] = 33;
    console.log(arr1);
    console.log(arr2);
    //获取对应下标中的数据
    console.log(arr1[3]);
</script>

使用数组的时候需要注意的事项:

  1. js中数组存储元素的数据类型是不一样的。但是我们在开发中一般都会在数组中存储同一种数据类型的数据。
var arr = ["a",12,"hello",true,4.12];
for(var i = 0;i<arr.length;i++){
    console.log(arr[i]);
}
  1. js中数组的长度不是固定的。
var arr2 = new Array(3); //声明了1个长度为3的数组
arr2[0] = 11;
arr2[1] = 22;
arr2[2] = 33;
arr2[3] = 89;//如果数组的长度不够用,我们可以动态扩容
arr2[4] = 99;
for(var i = 0;i<arr2.length;i++){
    console.log(arr2[i]);
}
console.log("数组的长度是:" + arr2.length);
  1. 在js数组中,如果通过索引值获取的数组元素不存在,对应元素的值为undefined
var arr = [];
arr[0] = 100;
arr[1] = 200;
arr[2] = 300;
console.log(arr[100])// undefined
1.2.1.1 通过循环遍历获取数组中的元素

遍历获取数组元素的方式有两种,一种是普通for循环获取数组中的元素。还有一种是for-in循环获取数组中的元素。

第一种 普通for循环:

var arr = [12,15,17,19,22,25];
for(var i = 0;i<arr.length;i++){
    console.log(arr[i]);
}

第二种 for-in循环:

var arr1 = [12,34,56,78,90];
for(var index in arr1){ // index指的是数组元素的下标
    document.write(arr1[index] + "<br>");
}
1.2.1.2 js中数组的相关练习
  • 求数组中所有元素之和
<script type="text/javascript">
    var arr = [10,20,30,40,50];
    var sum = 0;
    for(var i = 0;i<arr.length;i++){
        sum += arr[i];
    }
    document.write("数组中所有元素之和是:" + sum);
</script>
  • 求数组中所有元素的平均值
<script type="text/javascript">
    var arr = [10,20,30,40,50];
    var sum = 0;
    for(var i = 0;i<arr.length;i++){
        sum += arr[i];
    }
    document.write("数组中所有元素的平均值是:" + sum/arr.length);
</script>
  • 求数组中所有元素中的最大值
<script type="text/javascript">
    var arr = [10,20,30,40,50];
    var max = arr[0];
    for(var i = 0;i<arr.length;i++){
       if(arr[i] > max){
           max = arr[i]
       }
    }
    document.write("数组中最大的元素是:" + max);
</script>
  • 将字符串数组中的每个元素使用“-”拼接,然后形成一个字符串并输出。
<script type="text/javascript">
    var names = ["eric","miller","sunny","kobe","james"];
    var str = "";
    for(var i = 0;i<names.length-1;i++){
        str =  str + names[i] + "-";
    }
    document.write(str+ names[names.length - 1]);
</script>
1.2.2 函数
1.2.2.1 函数的基本概述

函数的定义:就是将一段功能代码进行封装,在需要这段代码的时候,我们直接通过函数的名称直接调用即可。

在js中使用函数需要注意的事项:

  1. 定义函数形参的时候,不能使用var关键字修饰参数的数据类型。
 function  getNum(num1,num2){// 形参num1 num2不需要加var修饰
     return num1 - num2;
 }
  1. 在js中我们无需定义函数的返回值类型,如果我们想要返回数据的话,在函数体内部,我们直接使用return关键字返回数据即可。
 function  getNum(num1,num2){
     return num1 - num2;// 如果需要返回数据 直接使用return关键字返回数据即可。
 }
  1. 在js中,不同于java,我们的函数是没有重载的概念的。如果出现了两个同名的函数,那么后面定义的函数会覆盖前面定义的函数。
<script type="text/javascript">
    
    function  getNum(num1,num2){
            return num1 - num2;
    }

    function  getNum(num1,num2){
        return num1 + num2;
    }

    var result = getNum(10,8);
    console.log(result);// 18 以第二个函数为准
</script>
  1. 在js函数中,任何函数的内部都隐式的维护了一个名字为arguments的数组对象,在进行参数传递的时候(实际参数传递给形式参数),首先会将参数传递给arguments数组对象,然后再将arguments数组对象中的值依次传递给形参。
<script type="text/javascript">
    function  getNum(num1,num2){
        for(var i = 0;i<arguments.length;i++){
            console.log(arguments[i]);
        }
        return num1 + num2;
    }
    //调用函数
    //var result = getNum(10,8);
    //console.log(result);// 18
    //var result1 = getNum(10,8,9,15);
    //console.log("函数的结果是:" + result1);//18
    var result2 = getNum(10);
    console.log("函数的结果是:" + result2);//NaN
</script>

在js中如何声明函数?有三种方式:声明普通函数、匿名函数、对象函数。

  • 普通函数的声明

语法格式:

function 函数名(参数列表){
	函数体
}

如何调用普通函数,通过函数名调用即可

<script type="text/javascript">
    function getNum(num1,num2){
        return num1 + num2;
    }
    //通过函数名调用函数
    var sum = getNum(10,2);

    function getTotal(num1,num2){
        console.log("函数的结果是:" + (num1 + num2));
    }
    //通过函数名调用函数
    getTotal(1,1);
</script>
  • 匿名函数

语法格式:

var fn = function(参数列名){
  函数体
}
//通过变量名调用函数即可
fn(实际参数);
<script type="text/javascript">
   //匿名函数
    var fn = function(num1,num2){
        document.write("两个数字之和是:" + (num1 + num2) + "<br>");
    }
    //调用函数
    fn(1,2);

    var fn1 = function(arr) {
      return arr.length;
    }
    var length = fn1("hello");
    document.write("字符串的长度是:" + length);
</script>
  • 对象函数

对象函数在声明的时候,参数列表必须是字符串类型,函数体也必须在双引号当中。

<script type="text/javascript">
	//对象函数
    var fn2 = new Function("a","b","console.log('两个数字之和是:' + (a + b))");
    //调用对象函数
    fn2(10,10);
</script>
1.2.2.2 函数的练习

练习:根据输入的数字,显示当前的月份:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <input type="text" id="time">
    <input type="button" value="查询" id="search" onclick="showTime()">
</body>
<script type="text/javascript">
    function showTime(){
        var inputObj = document.getElementById("time");//获取input输入框的对象。
        var time = inputObj.value; //获取输入框里的value值。
        switch (time) {
            case "1":
                alert("这是" + time + "月份");
                break;
            case "2":
                alert("这是" + time + "月份");
                break;
            case "3":
                alert("这是" + time + "月份");
                break;
            case "4":
                alert("这是" + time + "月份");
                break;
            case "5":
                alert("这是" + time + "月份");
                break;
            case "6":
                alert("这是" + time + "月份");
                break;
            case "7":
                alert("这是" + time + "月份")
                break;
            case "8":
                alert("这是" + time + "月份");
                break;
            case "9":
                alert("这是" + time + "月份");
                break;
            case "10":
                alert("这是" + time + "月份");
                break;
            case "11":
                alert("这是" + time + "月份")
                break;
            case "12":
                alert("这是" + time + "月份");
                break;
            default:
                alert("输入的月份非法");
                break;
        }
    }
</script>
</html>

1.3 js内置对象

内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)。目的就是帮助我们快速开发。JavaScript提供了多个内置对象: Math、 Date、Array. String等。

1.3.1 String内置对象

字符串创建的方式:

在js中字符串创建的方式有3种。创建的方式如下:

var str = 'ABC'; -- 直接赋值
var str1 = String('ABC'); -- 通过字符串的构造函数赋值
var str2 = new String('ABC'); -- new关键字赋值

三种创建字符串方式的数据类型是:

console.log(typeof str);// string
console.log(typeof str1);// string
console.log(typeof str2);// Object

解释:如果js数据类型是基本数据类型(string)。这种数据类型的值存储在栈内存中。如果js数据类型是引用数据类型(Object)。这种数据类型存储在堆内存中,并且栈内存中存储指定对内存的引用。

接下来我们再做如下判断:

<script type="text/javascript">
    var str = 'ABC';
    var str1 = String('ABC');
    var str2 = new String('ABC');
    var str3 = new String('ABC');
    var str4 = "ABC";
    var str5 = String('ABC');
    console.log(typeof str);// string
    console.log(typeof str1);// string
    console.log(typeof str2);// Object
    console.log("-----------------------");
    console.log(str2 == str3);// false 由于是Object对象类型的数据 比较的是内存地址
    console.log(str == str4); // true
    console.log(str == str5);// true
    console.log(str == str2); // true
    console.log(str3 == str5);//true

    console.log("-----------------------");
    console.log(str === str1);// true  === 不仅仅比较值 还比较其数据类型
    console.log(str === str4);// true
    console.log(str1 === str5);//true
    console.log(str === str2);// false   str是string类型 但是str2是object类型 数据类型不一致 所以为false
    console.log(str3 === str5);//false
</script>

字符串常用的方法:

<script type="text/javascript">
    var message = "hello";
    document.write(message.bold());// bold方法 给字符串文字加粗
    document.write("<br>");
    document.write(message.charAt(1));//返回执行索引位置上的字符
    document.write("<br>");
    document.write(message.charCodeAt(2));//返回指定位置字符的编码值
    document.write("<br>");
    document.write(message.concat("world"));//字符串内容的追加
    document.write("<br>");
    var str = "hello,javascript";
    document.write(str.fontsize(20));//设置文字大小
    document.write("<br>");
    document.write(str.fontcolor("red"));//设置文字颜色
    document.write("<br>");
    var username = "LebornJames";
    document.write(username.indexOf("J"));//返回指定字符在字符串中第一次出现的索引值位置
    document.write("<br>");
    document.write(username.lastIndexOf("e"));//返回指定字符在字符串中最后一次出现的索引值位置
    document.write("<br>");
    document.write(username.link("https://www.qq.com"));//给字符串设置超链接
    document.write("<br>");
    document.write(username.slice(6,11));//返回指定区间的字符串(范围是包头不包尾)
    document.write("<br>");
    document.write(username.replace("James","kobe"));//替换字符串内容
    document.write("<br>");
    var strs = username.split("");//切割字符串 返回新的字符串数组
    for(var index in strs){
        console.log(strs[index]);
    }
    document.write(username.substr(0,6));//截取字符串 参数1:字符串的起始索引值  参数2:截取字符串的长度
    document.write("<br>");
    document.write(username.substring(0,6));//截取字符串 参数1:字符串的起始索引值  参数2:截取字符串的结束索引值
    document.write("<br>");
    document.write(username.toUpperCase());//转大写
    document.write("<br>");
    document.write(username.toLowerCase());//转小写
    document.write("<br>");
</script>
1.3.2 Date内置对象
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
 当前系统时间是:<span id="s1"></span>
</body>
<script type="text/javascript">
    var date = new Date(); //创建当前系统时间的日期对象
    console.log('当前系统时间是:' + date);
    var year = date.getFullYear();//获取当前系统时间的年部分
    console.log("年:" + year);
    var month = date.getMonth();//获取当前系统时间的月部分
    console.log("月:" + month);
    var day = date.getDate();//获取当前系统时间的天部分
    console.log("日:" + day);
    var weekDay = date.getDay();//获取当前时间是星期几
    console.log("星期:" + weekDay);
    var hour = date.getHours();//获取当前系统时间的小时部分
    console.log("小时:" + hour);
    var minute = date.getMinutes();//获取当前系统时间的分钟部分
    console.log("分钟:" + minute);
    var second = date.getSeconds();//获取当前系统时间的秒部分
    console.log("秒:" + second);
    //自定义时间格式
    var currentTime = year + "-" + month + "-" + day + "&nbsp;&nbsp;" + hour + ":" + minute + ":" + second;
    //设置日期数据到span标签里面去  innHTML:给HTML标签设置文本内容
    document.getElementById("s1").innerHTML = currentTime;
</script>
</html>

需求:在页面上动态显示当前系统时间

<body>
 当前系统时间是:<span id="s1"></span>
</body>
<script type="text/javascript">
    function getCurrentTime(){
        var date = new Date(); //创建当前系统时间的日期对象
        console.log('当前系统时间是:' + date);
        var year = date.getFullYear();//获取当前系统时间的年部分
        console.log("年:" + year);
        var month = date.getMonth();//获取当前系统时间的月部分
        console.log("月:" + month);
        var day = date.getDate();//获取当前系统时间的天部分
        console.log("日:" + day);
        var weekDay = date.getDay();//获取当前时间是星期几
        console.log("星期:" + weekDay);
        var hour = date.getHours();//获取当前系统时间的小时部分
        console.log("小时:" + hour);
        var minute = date.getMinutes();//获取当前系统时间的分钟部分
        console.log("分钟:" + minute);
        var second = date.getSeconds();//获取当前系统时间的秒部分
        console.log("秒:" + second);
        //自定义时间格式
        var currentTime = year + "-" + month + "-" + day + "&nbsp;&nbsp;" + hour + ":" + minute + ":" + second;
        //设置日期数据到span标签里面去  innHTML:给HTML标签设置文本内容
        document.getElementById("s1").innerHTML = currentTime;
    }
    //定时函数(每隔指定的时间动态调用函数)
    window.setInterval("getCurrentTime()",1000);//参数1:定时执行的函数  参数2:定时执行的时间(单位是毫秒)
</script>
1.3.3 Math对象
<script type="text/javascript">
    var number = Math.abs(-90);//取绝对值
    console.log(number);
    var floor = Math.floor(3.9994);//向下取整
    console.log(floor);
    var round = Math.round(3.14);
    console.log(round);
    var ceil = Math.ceil(3.0004);//向上取整
    console.log(ceil);
    var random = Math.random();//取随机数(0-1)
    console.log(random);
    //需求:在指定区间(i<=R<=j)获取随机的整数  Math.floor(i+Math.random()*(j-i+1));   10-15
    var num = Math.floor(10 + Math.random()*6);
    console.log(num);
    var min = Math.min(21,23,45,67,78);//取最小值
    console.log(min);
    var max = Math.max(21,23,45,67,78);//取最大值
    console.log(max);
    var num1 = Math.trunc(3.14);//返回的是一个数的整数部分,不管正数还是负数,直接去掉小数点及之后的部分.
    console.log(num1);
    var num2 = Math.trunc(-3.14);
    console.log(num2);
    var num3 =4.2167456;
    num3 = num3.toFixed(2); // 四舍五入,并且精确到小数点后2位 输出结果为 4.22
    console.log(num3)
    var num4 =4.2167456;
    num4 = Math.floor(num4 * 100) / 100; // 输出结果为 4.21
    console.log(num4);
</script>
1.3.4 Number对象
<script type="text/javascript">
    var num1 = 0.1 + 0.2; //0.30000000000000004
    console.log(num1);
    console.log(0.3==num1);
    var num2 = new Number(3.1415926);
    console.log(num2.toFixed(3));//四舍五入精确到指定的位数
</script>
1.3.4 Array对象
<script type="text/javascript">
    var arr = [1,2,3,4,5];
    var arr1 = [6,7,8,9];
    var arr = arr.concat(arr1);//arr1中的元素追加到arr数组中
    for(var index in arr){
        console.log(arr[index]);
    }
    var message = arr.join("-");//将数组中的元素安装某种方式串联起来
    console.log(message);
    var last = arr.pop();//将数组中最后一个元素删除并将其返回
    console.log(last);
    console.log(arr.length);
    var arr2 = [10,11,12,13,14,15];
    var length = arr2.push(16,17);//追加指定的元素到数组中 返回数组的长度
    console.log("追加之后的数组长度:" + length);
    for(var i = 0;i<arr2.length;i++){
        console.log(arr2[i]);
    }
    var arr3 = ["A","B","C","D","E"];
    var newArr3 = arr3.reverse();//翻转数组中的元素
    for(var index in newArr3){
        console.log(newArr3[index]);
    }
    console.log("------")
    var arr4 = [11,12,13,14,15];
    var newArr4 = arr4.slice(2,4);//根据指定区间截取数组中的元素返回到一个新数组中
    for(var index in newArr4){
        console.log(newArr4[index]);
    }
    var arr5 = [12,67,54,89,23];
    var newArr5 = arr5.sort();//排序数组中的元素
    console.log("------");
    for(var index in newArr5){
       console.log(newArr5[index]);
    }
</script>
1.3.5 自定义对象
1.3.5.1 通过new关键字构造对象
<script type="text/javascript">
    //创建一个对象
    var person = new Object();
    //给对象设置属性并赋值
    person.name = "铁蛋";
    person.age = 12;
    person.gender = "男";
    
    //给对象定义方法
    person.eat = function() {
      document.write(this.name + "在吃饭" + "<br>");
    }

    person.showInfo = function() {
      document.write("姓名:" + this.name + "年龄:" + this.age + "性别:" + this.gender);
    }
    //调用对象中的属性和方法
    document.write(person.name + "<br>");
    document.write(person.age + "<br>");
    document.write(person.gender + "<br>");

    person.eat();
    person.showInfo();
</script>
1.3.5.2 通过工厂模式创建对象
//使用工厂模式构建对象
function createObject(name,age) {
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.showInfo = function(){
        document.write("姓名:" + this.name + "年龄:" + this.age + "<br>");
    }
    return obj;
}
//通过工厂函数构建对象
var s1 = createObject("张三",12);
console.log(s1.name);
console.log(s1.age);
s1.showInfo();
var s2 = createObject("李四",18);
1.3.5.3 使用自定义构造函数调用对象
//使用自定义构造函数创建对象
function Person(name,age) {
    this.name = name;
    this.age = age;
    this.show = function() {
        document.write("姓名:" + this.name + "年龄:" + this.age + "<br>");
    }
}
//通过构造函数创建对象
var p1 = new Person("铁蛋",2);
p1.show();
var p2 = new Person("铁柱",4);
p2.show();
1.3.5.4 使用原型的思想构建对象
//使用原型的方式构建对象  prototype
function Cat(){

}
//通过原型prototype给对象赋值
Cat.prototype.name = "大橘";
Cat.prototype.color = "橘色";
Cat.prototype.age = 2;
Cat.prototype.showCat = function(){
    console.log("姓名:" + this.name + " 年龄:" + this.age + "颜色:" + this.color);
}
//使用对象的属性和方法
var cat = new Cat();
console.log(cat.name + "  " + cat.age + "  " + cat.color);
cat.showCat();
1.3.5.5 使用字面量的方式创建对象(重点)
var student = {
    name:"小明",
    age:12,
    study:function(){
        console.log(this.name + "在学习JAVA......");
    },
    showInfo:function() {
        console.log("姓名:" + this.name + " 年龄:" + this.age);
    }
}
student.study();
student.showInfo();

在js中,我们经常会遇到一种数据格式,这种数据格式就是{k1:v1,k2:v2,k3:v3....}。这种格式的数据我们称为json数据,这种json数据本质上也是一个js对象。

<script  type="text/javascript">
    //json的格式  {k1:v1,k2:v2,k3:v3....}
    var jsonObj = {
        name:"kobe",
        age:12,
        gender:"男"
    };
	//获取json对象里的属性
    console.log(jsonObj.name + "  " + jsonObj.age + "  " + jsonObj.gender);
	//通过for in循环遍历json对象里面的属性
    for(index in jsonObj){
        console.log(jsonObj[index]);
    }
</script>

练习:js中值传递和引用传递

<script type="text/javascript">
    var num = 10;
    function x(num) { // num是一个拷贝,它传递的不是num本身 这就是一个值传递
      num = 100;
    }
    x(num);
    document.write(num);//10 值没有发生变化

    var obj = {
        name:"铁柱"
    }
    function change(obj) {// 引用类型的传递
      obj.name = "铁蛋";
    }
    change(obj);
    console.log(obj);//值发生了变化
</script>

1.4 事件

什么是事件:事件就是用户通过某种动作或行为(单击、双击、鼠标悬停、表单提交、 打开网页等)触发js代码。

事件的三大要素:

事件源:事件需要在哪个HTML元素上触发。

事件本身:单击、双击、获取焦点、失去焦点、鼠标移入移出等

事件处理程序:完成事件触发效果需要执行的js代码。

1.4.1 单击事件–onclick

需求1:单击按钮,触发一个弹框效果。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <!--<input type="button" value="按钮" οnclick="showMessage()"> -->
    <input type="button" value="按钮" id="btn">
</body>
<script type="text/javascript">
    /*function showMessage(){
        alert("hello world....");
    }*/
    
    var btnObj = document.getElementById("btn");
    btnObj.onclick = function(){
        alert("hello world....");
    }
</script>
</html>

需求2:单击按钮,生成新的按钮。

<body>
    <input type="button" value="按钮" onclick="createButton()">
</body>
<script type="text/javascript">
    var i= 1;
    function createButton(){
        //创建一个按钮对象
        var buttonObj = document.createElement("input");
        //给创建好的按钮对象设置属性
        buttonObj.setAttribute("type","button");
        buttonObj.setAttribute("value","按钮"+i);
        i++;
        //在body标签里面追加创建好的按钮对象
        var bodyObj = document.getElementsByTagName("body")[0];
        bodyObj.appendChild(buttonObj);
    }
</script>
1.4.2 鼠标的移入移出事件

鼠标移入事件:onmouseover

鼠标移出事件:onmouseout

需求1:当前系统时间的显示和清除

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <span onmouseover="showTime()" onmouseout="clearTime()">显示当前系统时间:</span>
    <span id="s1"></span>
</body>
<script type="text/javascript">

   function getCurrentTime() {
     var date = new Date();
     var currentTime = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate() + "&nbsp;&nbsp;"
     + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
     var spanObj = document.getElementById("s1");
     spanObj.innerHTML = currentTime;
   }

   var id = 0;
   function showTime(){
       id= window.setInterval("getCurrentTime()",1000);//定时器 让指定的方法每隔1000毫秒就触发1次
   }

   function clearTime(){
       window.clearInterval(id);//通过定时器的id来清除定时器的功能
       var spanObj = document.getElementById("s1");
       spanObj.innerHTML = "";
   }
</script>
</html>

需求2:鼠标移入移出 div的颜色发生变化

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    div#box1{
        width: 200px;
        height: 200px;
        border:1px solid red;
    }
</style>
</head>
<body>
   <div id="box1" onmouseover="showColor()" onmouseout="clearColor()"></div>
</body>
<script type="text/javascript">

    var divObj = document.getElementById("box1");

    function showColor() {
        //给标签对象设置样式 -- 设置背景颜色
        divObj.style.backgroundColor = "orangered";
    }

    function clearColor() {
        divObj.style.backgroundColor = "skyblue";
    }
</script>
</html>
1.4.3 获取焦点 失去焦点事件

获取焦点事件:onfocus

失去焦点事件:onblur

需求:用户获取焦点或失去焦点的时候,给出对应的提示信息。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    用户名: <input type="text" id="username" onfocus="showusername()" onblur="checkusername()"><span id="s1"></span><br>
    密码: <input type="password" name="password"><span id="s2"></span><br>
</body>
<script type="text/javascript">

    //获取焦点事件
    function showusername(){
        var spanObj1 = document.getElementById("s1");
        spanObj1.innerHTML = "请输入用户名,用户名的长度必须在4-10位之间".fontcolor("green");
    }

    //失去焦点事件
    function checkusername() {
        var usernameObj = document.getElementById("username");
        var spanObj1 = document.getElementById("s1");
        //获取用户名输入框里面的值
        var username = usernameObj.value;
        if(username.length >=4 && username.length <=10){
            spanObj1.innerHTML = "用户名输入正确".fontcolor("green");
        }else{
            //让鼠标光标自动切换进输入框,并且将输入的内容清除
            usernameObj.focus();//让html对象获取焦点
            usernameObj.value = "";//清空输入框里面的值
            spanObj1.innerHTML = "用户名输入有误".fontcolor("red");
        }
    }
</script>
</html>
1.4.4 下拉框区域改变事件

onchange描述下拉框区域改变事件。

需求:实现省市联动

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <select name="" id="area">
        <option value="bj">北京</option>
        <option value="sh">上海</option>
        <option value="gd">广东</option>
    </select>
    <select name="" id="city">
        <option value="hd">海淀区</option>
        <option value="cy">朝阳区</option>
        <option value="xc">西城区</option>
    </select>
</body>
<script type="text/javascript">
    var areaObj = document.getElementById("area");
    var cityObj = document.getElementById("city");
    areaObj.onchange = function(){
        //获取id为area的select下拉框的value值
        var areaValue = areaObj.value;
        switch(areaValue){
            case "bj":
                cityObj.innerHTML = "<option value='hd'>海淀区</option><option value='cy'>朝阳区</option><option value='xc'>西城区</option>";
                break;
            case "sh":
                cityObj.innerHTML = "<option value='hp'>黄浦区</option><option value='pd'>浦东新区</option><option value='hk'>虹口区</option>";
                break;
            case "gd":
                cityObj.innerHTML = "<option value='gz'>广州市</option><option value='sz'>深圳市</option><option value='zh'>珠海市</option>";
                break;
            default:
                alert("error!!!");
                break;

        }
    }
</script>
</html>
1.4.5 窗体加载事件

窗体加载事件:onload

需求:当浏览器窗口一打开的时候,立即显示div标签里面的文本内容。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
      div#box{
           width: 200px;
           height: 200px;
           background-color: orange;
      }
  </style>
</head>
<body>
   <div id="box"></div>
</body>
<script type="text/javascript">
    window.onload = function(){//窗体加载事件
        document.getElementById("box").innerHTML = "box";
    }
</script>
</html>
1.4.6 键盘事件

keydown:在键盘上按下某个键时触发。

keypress:按下某个键盘键并释放时触发。

keyup:释放某个键盘键时触发。

案例:按住上下左右键,使div不断移动

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
       <div id="box"></div>
</body>
<script type="text/javascript">
    var divObj = document.getElementById("box");
    //设置样式属性
    divObj.style.width = "50px";
    divObj.style.height = "50px";
    divObj.style.backgroundColor = "orangered";
    //设置绝对定位
    divObj.style.position = "absolute";
    //注册一个按键事件
    document.onkeydown = function(event){// 上箭头38 右箭头39 下箭头 40 左箭头 37
       switch(event.keyCode){//获取键盘按键的键码值
           case 37: //左
               divObj.style.left = divObj.offsetLeft -5 + "px";
               break;
           case 38: //上
               divObj.style.top = divObj.offsetTop - 5 + "px";
               break;
           case 39://右
               divObj.style.left = divObj.offsetLeft + 5 + "px";
               break;
           case 40://下
               divObj.style.top = divObj.offsetTop + 5 + "px";
               break;
       }
    }
</script>
</html>
1.4.7 阻止事件的默认行为和传播行为
1.4.7.1 阻止事件的默认行为

比如a标签内置有跳转的行为,这就是事件的默认行为。如何阻止事件的默认行为呢?

window.event.returnValue = false ; --如果浏览器是ie浏览器
e.preventDefault(); -- 其他浏览器
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <a href="https://www.qq.com" onclick="fn(event)">[跳转到]</a>
</body>
<script type="text/javascript">
    function fn(e) { // event事件对象
      if(e && e.preventDefault){//非ie浏览器
          e.preventDefault();
      }else{// ie浏览器
          window.event.returnValue = false;
      }
    }
</script>
</html>
1.4.7.2 阻止事件的传播行为
window.event.cancelBubble = true -- ie浏览器
e.stopPropagation(); -- 其他浏览器
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    div#box1{
        width: 400px;
        height: 400px;
        background-color: orangered;
    }

    div#box2{
        width: 200px;
        height: 200px;
        background-color: skyblue;
    }
  </style>
</head>
<body>
    <div id="box1" onclick="fn1()">
        <div id="box2" onclick="fn2(event)"></div>
    </div>
</body>
<script type="text/javascript">
    function fn1(){
        alert("box1");
    }

    function fn2(e) {
      if(e && e.stopPropagation){ //非ie浏览器
          e.stopPropagation();
      }else{
          window.event.cancelBubble = true;
      }
      alert("box2");
    }
</script>
</html>

1.5 BOM编程

BOM 操作是指操作浏览器相关的内容,其操作范畴包括了:浏览器滚动条、页面历史会退和前进、开启新标签页和关闭当前标签页等。

BOM 全名为 Browser Object Model,是一整套操作浏览器相关内容的属性和方法,这些方法可以用于操作浏览器历史记录、滚动条、页面跳转、标签页的开启和关闭等。

1.5.1 window对象

window内置对象是对整个浏览器窗口进行描述。

常用的方法:

确认框:confirm();

<script type="text/javascript">
    //弹出一个确认框 返回值是boolean值.点击确定返回为true 点击取消返回为false.
    var flag = window.confirm("确认要删除吗?")
    console.log(flag);
</script>

提示框:alert();

<script type="text/javascript">
	window.alert("hello");
</script>

输入框:prompt();

<script type="text/javascript">
     //输入框,返回值就是用户输入的内容
     var result = window.prompt("请输入姓名:");
     console.log(result);
</script>

打开新的网页标签: open();

<script type="text/javascript">
     // 打开一个新的网页标签,并且根据指定url进行访问
     window.open("https://www.qq.com");
</script>

定时器:setTimeOut(函数,毫秒值)。在指定的时间到了之后,执行对应的函数,但是只会执行1次。

需求:3秒钟之后出发弹框操作。

<script type="text/javascript">
    function open(){
        alert("hello");
    }
    window.setTimeout("open()",3000);
</script>

清除定时器: clearTimeOut()。专门清除setTimeOut触发的定时函数。

需求:定义一个计时器,点击开始就递增,点击结束,就停止递增。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <input type="button" value="开始" onclick="start()"> <span id="s1"></span>
    <input type="button" value="结束" onclick="end()">
</body>
<script type="text/javascript">
   var i = 1;
   var id = 0;
   function start() {//递归调用
     document.getElementById("s1").innerHTML = i;
     i++;
     id = window.setTimeout("start()",1000);
   }

   function end(){
       window.clearTimeout(id);
   }
</script>
</html>

定时器函数:setInterval(函数,毫秒值):每隔指定时间执行当前函数。

需求1:需求动态显示当前系统时间。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <span id="span2"></span>
</body>
<script type="text/javascript">
    /**定时器函数:setInterval(函数,毫秒值):每隔指定时间执行当前函数。
     需求1:需求动态显示当前系统时间。
     需求2:动态的新增表格里面的内容*/
    var span2 = document.getElementById('span2')
    span2.innerText=time();
    setInterval(function () {
        span2.innerText=time();
    },1000);
    function time() {
        var date = new Date();
        var Month = date.getMonth();
        if (Month<10){ Month = '0'+Month}
        var Dates = date.getDate();
        if (Dates<10){ Dates = '0'+Dates}
        var Hours = date.getHours();
        if (Hours<10){ Hours = '0'+Hours}
        var Minutes = date.getMinutes();
        if (Minutes<10){ Minutes = '0'+Minutes}
        var Seconds = date.getSeconds();
        if (Seconds<10){ Seconds = '0'+Seconds}
        var times = date.getFullYear()+'-'+Month+'-'+Dates
            +'  '+Hours+":"+Minutes+":"+Seconds;
        console.log(222)
        return times;
    }
    /** 需求2:动态的新增表格里面的内容  */
</script>
</html>

需求2:动态的新增表格里面的内容。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <table id="tb"  bgcolor="orange" width="400px"  align="center" cellpadding="1" cellspacing="1">
        <tr align="center" bgcolor="white">
            <td>姓名</td>
            <td>年龄</td>
            <td>地址</td>
            <td>人品</td>
        </tr>
    </table>
</body>
<script type="text/javascript">
  var i = 1;
  function addColumn() {
    var tbObj = document.getElementById("tb");
    var trObj = document.createElement("tr");
    trObj.setAttribute("align","center");
    trObj.setAttribute("bgcolor","white");
    //var trObj = document.createElement(" <tr align='center' bgcolor='white'><td>测试数据</td><td>测试数据</td><td>测试数据</td><td>测试数据</td></tr>");
    trObj.innerHTML = "<td>张三"+i+"</td><td>年龄"+i+"</td><td>地址"+i+"</td><td>人品"+i+"</td>";
    i++;
    tbObj.appendChild(trObj);
  }

  window.setInterval("addColumn()",1000);
</script>
</html>

需求3:倒计时效果,当倒计时结束之后,页面跳转。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  注册成功,<span id="s1">5</span>秒之后跳转,如不跳转,请点击<a href="https://www.qq.com">[跳转到]</a>
</body>
<script type="text/javascript">
    var time = 5;
    function getTime(){
        var spanObj = document.getElementById("s1");
        if(time >=1){
            spanObj.innerHTML = time;
            time--;
        }else{
            location.href = "https://www.qq.com";//通过浏览器地址栏进行跳转
        }
    }
    window.setInterval("getTime()",1000);
</script>
</html>

清除定时器: clearInterval() 专门清除setInterval触发的定时函数。

需求:点击开始按钮,动态显示当前系统时间,点击暂停按钮,停止时间。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <input type="button" value="开始" onclick="showTime()"><span>当前系统时间是:</span><span id="s1"></span>
    <input type="button" value="暂停" onclick="clearTime()">
</body>
<script type="text/javascript">

   function getCurrentTime() {
     var date = new Date();
     var currentTime = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate() + "&nbsp;&nbsp;"
     + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
     var spanObj = document.getElementById("s1");
     spanObj.innerHTML = currentTime;
   }

   var id = 0;
   function showTime(){
       id= window.setInterval("getCurrentTime()",1000);//定时器 让指定的方法每隔1000毫秒就触发1次
   }

   function clearTime(){
       window.clearInterval(id);//通过定时器的id来清除定时器的功能
   }
</script>
</html>
1.5.2 location对象和history对象

location:浏览器地址栏对象。

location.href():

<script type="text/javascript">
    location.href = "https://www.qq.com";
</script>

reload:重新加载网页资源

location.reload():

location.reload();// 从浏览器缓存里面加载
location.reload(true); //从服务器里面加载

hostory.back() 后退

history.forward() 前进

history.go(1) 前进

history.go(-1) 后退

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
   这是第二页, <a href="page3.html">下一页</a>, <a href="page1.html">上一页</a>
   <!--
   <input type="button" value="上一页" οnclick="history.go(-1)">
   <input type="button" value="下一页" οnclick="history.go(1)">  -->
   <input type="button" value="上一页" onclick="history.back()">
      <input type="button" value="下一页" onclick="history.forward()">
</body>
</html>

1.6 DOM

DOM(document object model):文档对象模型。DOM描述了一个层次化的树,这棵树由很多节点(node)组成,允许我们对这棵树中的节点进行添加、删除、修改。我们通过document对象来描述整颗文档树。

下面我们通过document来对文档树进行相关的操作:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <a href="https://www.baidu.com">[超链接1]</a>
    <a href="https://www.qq.com">[超链接2]</a>
    <a href="https://www.sina.com.cn">[超链接3]</a>  <br>
    <img src="C:\Users\kriss\Pictures\Saved Pictures\AudiA7.jpg" alt="">
    <img src="C:\Users\kriss\Pictures\Saved Pictures\AudiA8.jpg" alt="">
    <br>
    <form action="#" method="post">
        用户名: <input type="text" name="username"> <br>
        密码: <input type="password" name="password"> <br>
        <input type="submit" value="提交">
    </form>
</body>
<script type="text/javascript">
    //获取dom树
    var dom = window.document;
    function findDom(){
         var arrDom = dom.all;//通过dom树获取所有的节点的数组对象
         for(var i = 0;i<arrDom.length;i++){
             console.log(arrDom[i].nodeName);//nodeName  通过节点对象获取节点的名称
         }
    }
    //调用方法
    findDom();

    //获取超链接
    function findLinks(){
        var arrLinks = dom.links;
         for(var i = 0;i<arrLinks.length;i++){
             var aObj = arrLinks[i];//获取节点对象
             var value = aObj.href;//获取节点对象的href属性值
             console.log(value);
         }
    }
    findLinks();

    //获取img标签
    function findImgs(){
        var imagesArr = dom.images;
        for(var i = 0;i<imagesArr.length;i++){
            var imgObj = imagesArr[i];
            console.log(imgObj.src);
        }
    }
    findImgs();

    //获取表单
    function findForms(){
       var formArr = dom.forms;
       console.log(formArr.length);
       console.log(formArr[0].nodeName);
    }
    findForms();
</script>
</html>
1.6.1 获取节点对象

document.getElementById(“HTML元素的id值”);

document.getElementsByTagName(“标签名称”);

document.getElementsByName(“标签元素的name属性值”);

document.getElementsByClassName(“class属性值”);

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
   <div id="box"></div>

   <p>段落1</p>
   <p>段落2</p>
   <p>段落3</p>

   <input type="text" name="username" value="eric"> <br>

   <div class="box2">div1</div>
   <div class="box2">div2</div>
</body>
<script type="text/javascript">
    //根据标签的id值获取节点对象的集合
    var divOj = document.getElementById("box");
    console.log(divOj.id);

    //根据标签名称获取节点对象的集合
    var pArrs = document.getElementsByTagName("p");
    for(var i = 0;i<pArrs.length;i++){
        var pObj = pArrs[i];
        console.log(pObj.innerHTML);//获取节点对象的文本内容
    }

    //根据标签的name属性值获取对应的节点对象
    var inputArrs = document.getElementsByName("username");
    for(var i = 0;i<inputArrs.length;i++){
        var inputObj = inputArrs[i];
        console.log(inputObj.value);
    }

    //根据class属性值获取对应的节点对象
    var divs = document.getElementsByClassName("box2");
    for(var i = 0;i<divs.length;i++){
        var divObj = divs[i];
        console.log(divObj.innerHTML);
    }
</script>
</html>

案例1:获取任意一个节点对象的子节点的nodeName、nodeType、nodeValue。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <div id="box1">
        <span id="s1">span1</span>
        <div id="box2">box2</div>
        <!--hello-->
    </div>
</body>
<script type="text/javascript">
    var divObj = document.getElementById("box1");
    var arr = divObj.childNodes;
    for(var i = 0;i<arr.length;i++){
        var obj = arr[i];
        console.log("节点名称: " + obj.nodeName + "  节点类型: " + obj.nodeType + "  节点的值:" + obj.nodeValue);
    }
</script>
</html>

nodeType:描述节点的类型 类型是数字编号的。

nodeType:1 描述的就是普通的HTML节点(div span p).

nodeType:3 描述的是空文本节点(元素与元素之间换行了,换的行就是空文本节点)

nodeType:8 描述的是注释节点

案例2:设置复选框的全选和反选状态

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <div>商品列表</div>
    <input type="checkbox" name="item" value="1000">手机1000元<br>
    <input type="checkbox" name="item" value="2000">手机2000元<br>
    <input type="checkbox" name="item" value="3000">手机3000元<br>
    <input type="checkbox" name="item" value="4000">手机4000元<br>
    <input type="checkbox" name="item" value="5000">手机5000元<br>
    <input type="checkbox" name="item" value="6000">手机6000元<br>
    <input type="checkbox" name="all" onclick="checkAll()">全选 <br>
    <input type="button" value="总金额" onclick="getSum()">
    <span id="s1"></span>
</body>
<script type="text/javascript">
    function checkAll(){
        var checkObj = document.getElementsByName("all")[0];
        var itemsObj = document.getElementsByName("item");
        var flag = checkObj.checked;//复选框的的状态  true 选中状态 false 未选中状态
        if(flag){
            for(var i = 0;i<itemsObj.length;i++){
                itemsObj[i].checked = true; //设置被选中状态
            }
        }else{
            for(var i = 0;i<itemsObj.length;i++){
                itemsObj[i].checked = false; //设置不选中状态
            }
        }
    }

    var sum = 0;
    function getSum(){
      var itemsObj = document.getElementsByName("item");
      for(var i = 0;i<itemsObj.length;i++){
         if(itemsObj[i].checked){
            sum += parseInt(itemsObj[i].value);
         }
      }
      var str = sum + "元";
      document.getElementById("s1").innerHTML = str;
    }
</script>
</html>
1.6.2 通过节点关系查找节点

parentNode 获取当前节点元素的父节点

childNodes 获取当前元素的所有下一级元素

firstChild 获取当前节点的第一个子节点

lastChild 获取当前节点的最后一个子节点

nextSibling 获取当前节点的下一个兄弟节点

previousSibling 获取当前节点的上一个兄弟节点

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div id="box2">盒子2</div>
  <form action="#" id="form1">
    <label>姓名:</label>
    <input type="text">
  </form>
  <div id="box1">盒子1</div>
</body>
<script type="text/javascript">
   var form = document.getElementById("form1");
   var childArr = form.childNodes;
   //alert(childArr.length);
   var first = form.firstChild;//通过父节点获取第一个子节点
   console.log(first);
   var last = form.lastChild;//通过父节点获取最后一个子节点
   console.log(last);
   var next = form.nextSibling.nextSibling; //获取下一个兄弟节点
   console.log(next);
   var previous = form.previousSibling.previousSibling;//获取上一个兄弟节点
   console.log(previous);
</script>
</html>
1.6.3 节点操作–创建新节点

document.createElement(“标签名称”);创建新元素节点

element.setAttribute(“属性名称”,“属性值”); 设置元素的属性和属性值

element.appendChild(e); 给元素添加子节点,添加到末尾

element.insertBefore(new,child); 将元素添加到child的前面

element.removeChild(child);删除子节点

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <table>
        <tr>
            <td>
                <input type="button" value="0">
            </td>
        </tr>
        <tr>
            <td>
                <input type="button" value="添加" onclick="add()">
            </td>
        </tr>
    </table>
</body>
<script type="text/javascript">
    function add(){
        //创建按钮对象
        var inputObj = document.createElement("input");
        //给按钮对象设置属性值
        inputObj.setAttribute("type","button");
        inputObj.setAttribute("value","按钮");
        var bodyObj = document.getElementsByTagName("body")[0];
        //将创建好的按钮对象追加到body标签的内部(body标签内部的末尾处)
        bodyObj.appendChild(inputObj);
    }
</script>
</html>
<script type="text/javascript">    
var i = 1;
    function add(){
        //创建tr节点
        var trObj = document.createElement("tr");
        //创建td节点
        var tdObj = document.createElement("td");
        //创建input节点
        var inputObj = document.createElement("input");
        inputObj.setAttribute("type","button");
        inputObj.setAttribute("value","按钮"+i);
        i++;
        tdObj.appendChild(inputObj);
        trObj.appendChild(tdObj);
        //获取tbody节点对象
        var tbody = document.getElementsByTagName("tbody")[0];
        var button1 = document.getElementById("b1");
        tbody.insertBefore(trObj,button1);
    }
</script>

案例:实现省市联动

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <select id="selid" id="" onchange="selectCity()">
        <option value="">---请选择---</option>
        <option value="">北京市</option>
        <option value="">上海市</option>
        <option value="">广东省</option>
    </select>
    <select id="cityid" id="">
        <option value="">---请选择---</option>
    </select>
</body>
<script type="text/javascript">
   function selectCity(){
       var bj = ["海淀区","朝阳区","大兴区","密云区"];
       var sh = ["黄浦区","杨浦区","闵行区","虹口区"];
       var gd = ["广州市","深圳市","珠海市","中山市"];
       var selectNode = document.getElementById("selid");
       var cityNode = document.getElementById("cityid");
       var index = selectNode.selectedIndex;
       //console.log(index);
       if(index == 1){
           cityNode.options.length = 0;//清除select下拉框里的option
           for(var i = 0;i<bj.length;i++){
               var optionObj = document.createElement("option");
               optionObj.innerHTML = bj[i];
               cityNode.appendChild(optionObj);
           }
       }
       if(index == 2){
          cityNode.options.length = 0;//清除select下拉框里的option
          for(var i = 0;i<sh.length;i++){
              var optionObj = document.createElement("option");
              optionObj.innerHTML = sh[i];
              cityNode.appendChild(optionObj);
          }
       }
       if(index == 3){
         cityNode.options.length = 0;//清除select下拉框里的option
         for(var i = 0;i<gd.length;i++){
             var optionObj = document.createElement("option");
             optionObj.innerHTML = gd[i];
             cityNode.appendChild(optionObj);
         }
      }
   }
</script>
</html>

案例:动态显示年月日

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    生日:
      <select id="year">
            <option></option>
      </select>

      <select id="month">
            <option></option>
      </select>
      <select id="day">
            <option></option>
      </select>
</body>
<script type="text/javascript">
    //获取year
    function getYear(){
        var yearObj = document.getElementById("year");
        var minYear = 1980;
        var maxYear = new Date().getFullYear();
        for(var i = minYear;i <= maxYear;i++){
            //创建节点
            var optionObj = document.createElement("option");
            optionObj.innerHTML = i;
            optionObj.value = i;
            //追加节点
            yearObj.appendChild(optionObj);
        }
    }

    //获取月份
    function getMonth(){
        var monthObj = document.getElementById("month");
        for(var i = 1;i<=12;i++){
             var optionObj = document.createElement("option");
             if(i < 10){
                  optionObj.innerHTML = "0" + i;
                  optionObj.value = i;
             }else{
                  optionObj.innerHTML = i;
                  optionObj.value = i;
             }
             monthObj.appendChild(optionObj);
        }
        monthObj.onchange = getDay;
    }

    //获取日期
    function getDay(){
        // 1  3  5  7  8 10 12   31天   闰年2月29天 非闰年的是28天  其余的30天
        //闰年:年份可以被4整除但是不能被100整除 或者年份可以被400整除
        //获取用户选定的年和月的值
        var dayObj = document.getElementById("day");
        var optArr = dayObj.childNodes;
        for(var i = optArr.length -1 ; i >= 0 ; i--){
            dayObj.removeChild(optArr[i]);
        }
        var year = document.getElementById("year").value;
        var month = document.getElementById("month").value;
        if(year == ""){
            alert("请选择年");
            return;
        }
        if(month == ""){
            alert("请选择月");
            return;
        }
        //1个月至少有28天
        for(var i = 1;i<=28;i++){
            var opt = document.createElement("option");
            if(i < 10){
                opt.innerHTML = "0" + i;
                opt.value = "0" + i;
            }else{
                opt.innerHTML = i;
                opt.value = i;
            }
            dayObj.appendChild(opt);
        }
        //大月
        var bigMonth = (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12);
        //小月
        var smallMonth = (month == 4 || month == 6 ||  month == 9 || month == 11);
        //闰年
        var runYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 ==0);
        console.log(year + "---" + month);
        if(bigMonth){
            for(var i = 29;i<=31;i++){
                var opt = document.createElement("option");
                opt.innerHTML = i;
                opt.value = i;
                dayObj.appendChild(opt);
            }
        }else if(smallMonth){
            for(var i = 29;i<=30;i++){
                var opt = document.createElement("option");
                opt.innerHTML = i;
                opt.value = i;
                dayObj.appendChild(opt);
            }
        }else if(runYear && month == 2){
            var opt = document.createElement("option");
            opt.innerHTML = 29;
            opt.value = 29;
            dayObj.appendChild(opt);
        }
    }

    function getBirthday(){
        getYear();
        getMonth();
    }

    getBirthday();
</script>
</html>

案例:生成一个验证码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <span id="codeSpan"></span> <a href="#">点击查看</a>
</body>
<script type="text/javascript">
    var datas = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","M","N","O","P"
    ,"Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n"
    ,"o","p","q","r","s","t","u","v","w","x","y","z"];
    var code = "";//保存验证码
    for(var i = 0;i<4;i++){
        var index = Math.floor(Math.random()*(datas.length))
        code += datas[index];
    }
    var codeSpan = document.getElementById("codeSpan");
    codeSpan.style.color = "red";
    codeSpan.style.fontSize = "20px"
    codeSpan.style.backgroundColor = "gray";
    codeSpan.style.textDecoration = "line-through";
    codeSpan.innerHTML = code;
</script>
</html>
1.6.4 正则表达式

正则表达式的格式:

^ 开头

$ 结尾

次数:* 0个或多个 + 1个或多个 ? 0个或1个 {n} 就是n个 {n,m} 最少n个 最多m个

通配符: \d 任意的数字 \D 任意的非数字 \s 任意的空白 \S 任意的非空白

. 任意字符(\n除外)

组合: [a-z][0-9]

标志:i 忽略大小写

方法: Regexp.test(message)

案例:使用正则表达式进行表单验证

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
    <form action="success.html" method="post" onsubmit="return checkForm()">
        姓名: <input type="text" name="username" id="username" onfocus="getName()" onblur="checkUserName()"> <span id="s1"> </span>  <br>
        密码: <input type="password" name="password" id="password" onfocus="getPwd()" onblur="checkPassword()"> <span id="s2"> </span>  <br>
        确认密码: <input type="password" name="pwd" id="pwd" onfocus="getConfirm()" onblur="checkConfirm()"> <span id="s3"> </span>  <br>
        邮箱: <input type="text" name="email" id="email" onfocus="getEmail()" onblur="checkEmail()"> <span id="s4"></span>  <br>
        <input type="submit" value="提交">
    </form>
</body>
<script type="text/javascript">

  var s1Obj = document.getElementById("s1");
  var s2Obj = document.getElementById("s2");
  var s3Obj = document.getElementById("s3");
  var s4Obj = document.getElementById("s4");

  //校验用户信息是否输入正确
  // 获取焦点
  function getName(){
      s1Obj.innerHTML = "请输入用户名,用户名4-16位包含数字、字母、下划线、减号".fontcolor("green");
  }

  //失去用户名输入框焦点
  function checkUserName(){
    var username = document.getElementById("username").value;
    var reg = /^[a-zA-Z0-9_-]{4,16}$/;
    if(reg.test(username)){//输入的用户名和正则表达式匹配
        s1Obj.innerHTML = "用户名输入正确".fontcolor("green");
        return true;
    }else{
         s1Obj.innerHTML = "用户名输入格式不正确".fontcolor("red");
        return false;
    }
  }

  //校验密码框
  //获取密码框焦点  ^[a-zA-Z]\w{5,9}$
  function getPwd(){
       s2Obj.innerHTML = "请输入密码以字母开头,长度在6~10之间,只能包含字母、数字和下划线".fontcolor("green");
  }
  //失去密码输入框焦点
  function checkPassword(){
       var password = document.getElementById("password").value;
       var reg = /^[a-zA-Z]\w{5,9}$/;
       if(reg.test(password)){//输入的用户名和正则表达式匹配
           s2Obj.innerHTML = "密码输入正确".fontcolor("green");
           return true;
       }else{
            s2Obj.innerHTML = "密码输入格式不正确".fontcolor("red");
           return false;
       }
  }

  //确认密码
  function getConfirm(){
       s3Obj.innerHTML = "请输入确认密码".fontcolor("green");
  }

  //失去焦点
  function checkConfirm(){
      var password = document.getElementById("password").value;//第一次输入的密码
      var confirmPwd = document.getElementById("pwd").value;//第二次输入的密码
      if(password == confirmPwd){
           s3Obj.innerHTML = "确认密码输入正确".fontcolor("green");
           return true;
      }else{
          s3Obj.innerHTML = "确认密码输入有误".fontcolor("red");
          return false;
      }
  }

  //校验邮箱
  function getEmail(){
       s4Obj.innerHTML = "请输入邮箱".fontcolor("green");
  }

  function checkEmail(){
      var email = document.getElementById("email").value;
      var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
      if(reg.test(email)){//输入的用户名和正则表达式匹配
         s4Obj.innerHTML = "邮箱输入正确".fontcolor("green");
         return true;
      }else{
         s4Obj.innerHTML = "邮箱输入格式不正确".fontcolor("red");
         return false;
      }
  }

  //校验表单
  function checkForm(){
      if(checkUserName() && checkPassword() && checkConfirm() && checkEmail()){
          console.log(true)
          return true; //允许表单提交
      }else {
          return false; //不允许表单提交
      }
  }
</script>
</html>

2 Jquery

jquery是一个古老的js框架,主要是对原生的js进行了封装,提供了一系列操作DOM元素的方法。让我们更加方便的对DOM进行操作。

2.1 搭建Jquery环境

第一种:在项目中,引入jquery的库文件。

<script type="text/javascript" src="js/jquery-2.2.3.min.js"></script>

第二种:在线引入。

<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
在这里给大家提供一些在线引入jquery的网址
<!-- 官网jquery压缩版引用地址: -->
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<!-- 百度压缩版引用地址: -->
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<!-- 微软压缩版引用地址: -->
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"></script>

开发第一个jquery程序

<script type="text/javascript">
     $(function(){
         alert("hello,jquery");
     })
</script>

解读:

$(function(){}): jquery的工厂函数。功能类似于window.onload = function(){}

2.2 Jquery选择器

通过Jquery选择器能够帮助我们快速定位到指定的HTML元素,生成一个Jquery对象(你可以理解成原生js的dom对象)。通过这个jquery对象,我们可以对指定元素进行各种dom相关的操作。

Jquery选择器的格式: $(“css选择器”)。

2.2.1 Jquery基本选择器

基本选择器包括id选择 类选择器 标签选择器。

  • id选择器 $(“#id的属性值”)

addClass(): 给节点对象添加类样式。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width:200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("#box").addClass("a");//给id为box的标签添加一个类样式 类样式的名称为a
            var message = $("div#box1").text();//获取值
            console.log(message);
        })
  </script>
</head>
<body>
   <div id="box"></div>
</body>
</html>
  • 标签选择器 $(“标签名称”)
<script type="text/javascript">
    $(function(){
    	$("p").addClass("p"); // 标签选择器
	})
</script>
  • 类选择器 $(“.class属性值”)
<script type="text/javascript">
    $(function(){
    	$(".box2").addClass("a");
	})
</script>

对样式进行操作,还有一些方法 css()

<script type="text/javascript">
    $(function(){
    $("span#s1").css("color","red");//1个样式属性的写法
    $("span#s2").css({"color":"red","background-color":"skyblue"}); //多个样式属性的写法
})
</script>

移除类样式: removeClass(“”);

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .box3{
        width: 200px;
        height: 200px;
        background-color: orangered;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div.box3").removeClass("box3");//移除类样式
        })
  </script>
</head>
<body>
  <div class="box3"></div>
</body>
</html>
2.2.2 jquery的高级选择器
  • 并集选择器 $(“选择器1,选择器2,选择器3…”)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width: 200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div#box1,p#p1").addClass("a");//并集选择器
        })
  </script>
</head>
<body>
     <div id="box1"></div>
     <p id="p1"></p>
</body>
</html>
  • 后代选择器 $(“选择器1 选择器2 选择器3 …”)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width: 200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div#box2 div#box4").addClass("a");//后代选择器
        })
  </script>
</head>
<body>
    <div id="box2">
        <div id="box3">
            <div id="box4">盒子4</div>
        </div>
     </div>
</body>
</html>
  • 子父级选择器 $(“选择器1 > 选择器2”)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width: 200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div#box2 > div#box3").addClass("a");//子父级选择器
        })
  </script>
</head>
<body>
     <div id="box2">
        <div id="box3">box3</div>
     </div>
</body>
</html>
  • 相邻兄弟选择器 $(“选择器1 + 选择器2 + 选择器3…”)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width: 200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div#box1+div").addClass("a");// 相邻兄弟选择器
        })
  </script>
</head>
<body>
     <div id="box1">盒子1</div>
     <div id="box2">盒子2</div>
     <div id="box3">盒子3</div>
     <div id="box4">盒子4</div>
</body>
</html>
  • 通用兄弟选择器 $(“选择器1 ~ 选择器2 ~ 选择器3…”)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width: 200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div#box1~div").addClass("a");// 相邻兄弟选择器
        })
  </script>
</head>
<body>
     <div id="box1">盒子1</div>
     <div id="box2">盒子2</div>
     <div id="box3">盒子3</div>
     <div id="box4">盒子4</div>
</body>
</html>
  • 结构伪类选择器
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            //$("li:first").css({"color":"red"}); //选择第一个li
            //$("li:last").css({"color":"green"});//选择最后一个li
            //$("li:eq(3)").css({"color":"blue"});//选择编号是3的li 从0开始编号
            //$("li:even").css({"color":"blue"});//从0开始编号 选择偶数编号的li
            //$("li:odd").css({"color":"yellow"});//从0开始编号 选择奇数编号的li
            //$("li:gt(1)").css({"color":"yellow"});// 大于 greater then  
            //$("li:lt(3)").css({"color":"yellow"});// 小于 less then
            $("li:not(:eq(3))").css({"color":"yellow"});
            $(":header").css({"color":"yellow"});// 给所有的h标签设置样式
        })
  </script>
</head>
<body>
   <ul>
       <li>列表1</li>
       <li>列表2</li>
       <li>列表3</li>
       <li>列表4</li>
       <li>列表5</li>
   </ul>
   <h2>标题1</h2>
   <h3>标题2</h3>
   <h4>标题3</h4>
   <h5>标题4</h5>
</body>
</html>
  • 内容选择器

    :contains 匹配标签中文本内容

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
    <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div:contains('John')").css({"color":"red"}); //选择div内容中包含John的元素
        })
  </script>
</head>
<body>
    <div>John Resig</div>
    <div>George Martin</div>
    <div>Malcom John Sinclair</div>
    <div>J. Ohn</div>
</body>
</html>

​ :empty 匹配内容为空的元素

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("td:empty").text("单元格");//给指定的元素设置文本内容
        })
  </script>
</head>
<body>
    <table>
      <tr>
        <td>Value 1</td>
        <td></td>
      </tr>
      <tr>
        <td>Value 2</td>
        <td></td>
      </tr>
    </table>
</body>
</html>

​ :has 匹配包含某个指定标签的标签对象

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width: 200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            $("div:has(p)").addClass("a");
        })
  </script>
</head>
<body>
    <div>
        <p>Hello</p>
    </div>
    <div>Hello again!</div>
</body>
</html>

:parent 匹配包含子元素或者文本的标签

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
           $("td:parent").css("color","red");//匹配包含文本的td标签
        })
  </script>
</head>
<body>
<table>
  <tr>
    <td>Value 1</td>
    <td></td>
  </tr>
  <tr>
    <td>Value 2</td>
    <td></td>
  </tr>
</table>
</body>
</html>
  • 可见性选择器

    :hidden 选中隐藏的标签元素

    :visible 选中显示的标签元素

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
           //$("tr:hidden").show();//tr:hidden 匹配隐藏的元素  show()显示隐藏的匹配元素。
           $("tr:visible").hide(); //tr:visible 匹配显示的元素  hide() 隐藏显示的元素

        })
  </script>
</head>
<body>
<table>
  <tr style="display:none">  <!--style="display:none" 隐藏元素-->
      <td>Value 1</td>
  </tr>
  <tr>
      <td>Value 2</td>
  </tr>
</table>
</body>
</html>
  • 属性选择器
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
    .a{
        width: 200px;
        height: 200px;
        background-color: deeppink;
    }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
            //$("div[id]").addClass("a"); //匹配div中包含id属性的元素
            //$("div[id='test2']").addClass("a");//匹配div中id的属性是test2的元素
            //$("div[id!='test2']").addClass("a");//匹配div中id的属性不是test2的元素
            //$("div[id^='box']").addClass("a");//匹配div中id的属性以box开头的元素
            //$("div[id$='2']").addClass("a");//匹配div中id的属性以2结尾的元素
              $("div[id*='box']").addClass("a");//匹配div中id的属包括box的元素
        })
  </script>
</head>
<body>
     <div>
       <p>Hello!</p>
     </div>
     <div id="test2">元素1</div>
     <div id="box1">盒子1</div>
     <div id="box2">盒子2</div>
</body>
</html>
  • 子元素选择器
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
        $(function(){
             // $("ul li:nth-child(2)").css("color","red");//匹配li中第二个li元素
              $("ul li:first-child").css("color","red");//匹配li中第1个li元素
              $("ul li:last-child").css("color","green");//匹配li中最后个li元素
              $("ul li:only-child").css("color","blue");//匹配ul中的唯一的li
        })
  </script>
</head>
<body>
    <ul>
      <li>John</li>
      <li>Karl</li>
      <li>Brandon</li>
    </ul>
    <ul>
      <li>Glen</li>
      <li>Tane</li>
      <li>Ralph</li>
    </ul>
    <ul>
        <li>James</li>
    </ul>
</body>
</html>
  • 表单选择器

:input 匹配所有的input控件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
         var arr = $(":input");
        /* for(var i = 0;i<arr.length;i++){
             console.log(arr[i].value);
         }*/
        $(arr).each(function(){
           console.log(this.value); // this 循环遍历的每个元素
        });
     })
  </script>
</head>
<body>
  用户名: <input type="text" value="admin">
  密码:<input type="password" value="123">  <br>
</body>
</html>

:text 选中input输入框的type="text"的控件。

:password 选中密码控件

:radio:checked 获取单选按钮被选中的控件

:checkbox:checked 选中复选框被选中的按钮

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        var value = $(":text").val();//获取juquery对象的value值
        console.log(value);
        var pwd = $(":password").val(); //选中密码框
        console.log(pwd);
        var gender = $(":radio:checked").val();//选中的单选按钮
        console.log(gender);
        var hobbies = $(":checkbox:checked"); //选中复选框
        $(hobbies).each(function() {
          console.log(this.value);
        })
     })
  </script>
</head>
<body>
  用户名: <input type="text" value="admin">
  密码:<input type="password" value="123">  <br>
  性别: <input type="radio" value="man" name="gender" checked><input type="radio" value="woman" name="gender">女
  兴趣爱好: <input type="checkbox" value="football" checked> 足球
  <input type="checkbox" value="basketball" checked> 篮球
  <input type="checkbox" value="swimming"> 游泳  <br>
</body>
</html>
  • 表单属性对象

:checked 被选中的单选按钮或者复选框

:selected 被选中的下拉框选项

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
       //jquery中的事件--单击事件
       $("#btn").click(function(){
           var value = $("select option:selected").val();//获取被选中的下拉框
           console.log(value);
       })
     })
  </script>
</head>
<body>
  <select>
    <option value="beijing">北京</option>
    <option value="shanghai">上海</option>
    <option value="shenzhen">深圳</option>
  </select>
  <input type="button" value="提交" id="btn">
</body>
</html>

:disabled 选中不可用的标签

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
       var username = $("input:disabled").val();
       console.log(username);
     })
  </script>
</head>
<body>
  用户名: <input type="text" value="admin" disabled>
  密码:<input type="password" value="123">  <br>
</body>
</html>

2.3 jquery中的事件

2.3.1 单击事件 click

需求:用户点击button按钮,根据用户输入的内容给出不同的提示信息。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
         $("input:button").click(function() {
            var username = $("input:text").val();
            if(username.length >= 4 && username.length <= 6){
                $("span#s1").html("用户名输入正确").css("color","green"); // jquery中的链式编程
                //$("span#s1").css("color","green");
            }else{
                $("span#s1").html("用户名输入有误").css("color","red");
                //$("span#s1").css("color","red");
            }
         })
     })
  </script>
</head>
<body>
    <form action="#" method="post">
        用户名: <input type="text" name="username"> <span id="s1"></span> <br>
        <input type="button" value="提交">
    </form>
</body>
</html>
2.3.2 change事件

改变下拉框区域的时候会触发效果

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("select#s1").change(function(){
            var value = $("select option:selected").val();
            if(value == "bj"){
                $("select#s2").html("");//清空select标签内部的所有内容
                var arr = ["朝阳区","海淀区","西城区","大兴区"];
                for(var i = 0;i<arr.length;i++){
                    $("select#s2").append("<option>"+arr[i]+"</option>");
                }
            }
            if(value == "sh"){
                $("select#s2").html("");//清空select标签内部的所有内容
                var arr = ["黄浦区","虹口区","闵行区","杨浦区"];
                for(var i = 0;i<arr.length;i++){
                    $("select#s2").append("<option>"+arr[i]+"</option>");
                }
            }
            if(value == "gd"){
                $("select#s2").html("");//清空select标签内部的所有内容
                var arr = ["广州市","深圳市","珠海市","东莞市"];
                for(var i = 0;i<arr.length;i++){
                    $("select#s2").append("<option>"+arr[i]+"</option>");
                }
            }
        })
     })
  </script>
</head>
<body>
    <select id="s1">
        <option>--请选择--</option>
        <option value="bj">北京市</option>
        <option value="sh">上海市</option>
        <option value="gd">广东省</option>
    </select>
    <select id="s2">
        <option>--请选择--</option>
    </select>
</body>
</html>
2.3.3 获取焦点失去焦点事件

focus 获取焦点

blur 失去焦点

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("input:text").focus(function(){//获取焦点
            $("span#s1").html("请输入用户名").css("color","green");
        }).blur(function(){
            var reg  =/^[a-zA-Z]\w{5,10}$/;
            var username = $("input:text").val().trim();
            if(username.length != 0){
                if(!reg.test(username)){
                    $("span#s1").html("用户名输入格式不正确").css("color","red");
                }else{
                    $("span#s1").html("用户名输入正确").css("color","green");
                }
            }else{
                $("span#s1").html("用户名不能为空").css("color","red");
            }
        })  
       //校验密码
     })
  </script>
</head>
<body>
   <form action="#" method="post">
     用户名: <input type="text"> <span id="s1"></span> <br>
     密码: <input type="password"> <span id="s2"></span> <br>
   </form>
</body>
</html>
2.3.4 鼠标移入 移出事件

mousemove 鼠标移入 mosueout 鼠标移出

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style type="text/css">
      div#box{
        width: 200px;
        height: 200px;
        border: 1px solid red;
      }
  </style>
  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
       //鼠标移入移出事件
       $("div#box").mouseover(function() {
            console.log("hello");
            $("div#box").css({"background-color":"orangered"});
       }).mouseout(function() {
           console.log("out");
            $("div#box").css({"background-color":"deepskyblue"});
       })
     })
  </script>
</head>
<body>
   <div id="box">盒子1</div>
</body>
</html>

2.4 Jquery中的DOM操作

  • append(): 向元素的内部追加新的内容,在元素内部的末尾处追加。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("div#box1").append("<p class='p1'>段落1</p>").append("<p class='p2'>段落2</p>");
     })
  </script>
</head>
<body>
     <div id="box1"></div>
</body>
</html>
  • appendTo()

第一种:新建一个标签,然后将标签放在指定元素内部

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        var box2 = $("div#box2");
        $("<p class='p3'>段落3</p>").appendTo(box2); //将新增的段落3标签追加到box2这个div中。
     })
  </script>
</head>
<body>
     <div id="box1"></div>
     <div id="box2"></div>
</body>
</html>

第二种:将已经存在的标签移动指定标签的内部

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("p#p1").appendTo("div#box2"); //将已经存在的标签移动到指定标签的内部
     })
  </script>
</head>
<body>
     <p id="p1">段落</p>
     <div id="box1"></div>
    <div id="box2"></div>
</body>
</html>
  • prepend() 在元素的内部前置追加内容
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("div#box").prepend("<div id='box3'></div>"); //前置追加 追加在box1的前面
     })
  </script>
</head>
<body>
    <div id="box">
        <div id="box1"></div>
    </div>
</body>
</html>
  • prependTo() 将指定的元素前置追加到另外一个元素的内部

第一种:元素存在就是移动

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("p").prependTo("#foo");
     })
  </script>
</head>
<body>
    <p>段落</p><div id="foo">盒子1</div>
</body>
</html>

第二种:元素不存在就是创建之后前置追加

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("<p class='p1'>段落</p>").prependTo("#foo");
     })
  </script>
</head>
<body>
   <div id="foo">盒子1</div>
</body>
</html>
  • after() 将指定元素追加到另外一个指定元素的后面
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("div#box1").after("<div id='box2'>盒子2</div>");
     })
  </script>
</head>
<body>
   <div id="box1">盒子1</div>
</body>
</html>
  • before() 将指定元素追加到另外一个指定元素的前面
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("div#box1").before("<div id='box0'>盒子0</div>");
     })
  </script>
</head>
<body>
   <div id="box1">盒子1</div>
</body>
</html>
  • replaceWith() 将所有节点替换成新节点
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){ 
        $("p").replaceWith("<div>kobe</div>")
     })
  </script>
</head>
<body>
   <p>Hello</p>
   <p>cruel</p>
   <p>World</p>
</body>
</html>
  • empty() 清空指定元素的所有子节点
  • remove()
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
        $("#box1").empty();// 删除box1内部的所有元素
         $("#box2").remove();  // 删除box2
     })
  </script>
</head>
<body>
   <div id="box1">
       <div id="box2">
            <a href="#">[跳转到]</a>
       </div>
   </div>
</body>
</html>
  • clone() 元素的复制
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
       $("div#box1").clone().prependTo($("div#box2"));
     })
  </script>
</head>
<body>
    <div id="box1" onclick="alert('hello')">盒子1</div>
    <div id="box2">盒子2</div>
</body>
</html>

Jquery对象和DOM对象之间互相转换的问题。

var divObj = document.getElementById(“box”) – DOM 对象

var $divObj = $(“div#box1”); – Jquery对象

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>

  <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
  <script type="text/javascript">
     $(function(){
       var $divObj = $("div#box"); // jquery对象
       // 将jquery对象转换成js对象  方式1: var obj = jquery对象[0]  var obj = jquery对象.get(0);
       //var divObj = $divObj[0];
       var divObj = $divObj.get(0); //js对象
       divObj.innerHTML = "hello";

       //js对象转换成jquery对象   $(dom对象)
       var pObj = document.getElementById("p1"); // js对象
       var $pObj = $(pObj); //jquery对象
       $pObj.html("段落");
     })
  </script>
</head>
<body>
    <div id="box"></div>
    <p id="p1"></p>
</body>
</html>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值