欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端基础之JavaScript

程序员文章站 2024-01-25 16:00:10
...

一、JS概述

  avaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。 

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

为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。

二、JS引入方式

1 直接编写
    <script>
        alert('hello yuan')
    </script>
2 导入文件js文件
    <script src="hello.js"></script>
注意:
  • 在引入js文件的script,一定不能再写js代码
  • 标签里面写js代码一般情况下不推荐(指行内样式)
  • script标签的位置:head或body里面
  • 要注意是否需要加上window.onloa(该内容会在以后详述)
  • 如果说没有什么特别的需求,一般script标签放在body结束之前

三、JS变量

 变量也叫标识符:

<script>
  方式一 var f = 10;//结束语句必须加分号
  方式二 var a,b,c; //可以同时申明多个变量,用逗号隔开,申明的变量可以不直接引用
        a = 1;     //要使用时就可以直接引用
        b = 2;
        c = 3
</script>

1、声明变量时不用声明变量类型. 全都使用var关键字;

2、一行可以声明多个变量.并且可以是不同类型

3、声明变量时 可以不用var. 如果不用var 那么它是全局变量

4、变量命名,首字符只能是字母,下划线,$美元符 三选一,余下的字符可以是下划线、美元符号或任何字母或数字字符且区分大小写,x与X是两个变量 

 

 

js保留字在python中常叫关键字:

 

前端基础之JavaScript

 

JS的数据类型:

1.number 数字类型   在js里面的小数和整数统一都是数字 -2^53 -- 2^53 超出范围之后精度就会不准确
2.string 字符串
3.boolean 布尔值 true false
4.undefined 未定义 一个变量声明之后没有赋值就是undefined
在js里面null属于对象类型,但是它不具有很多对象的共性,所以很多资料将它归为单独一类数据类型null

数字类型:

  1. 不区分整型数值和浮点型数值;
  2. 所有数字都采用64位浮点格式存储,相当于Java和C语言中的double格式
  3. 能表示的最大值是±1.7976931348623157 x 10308
  4. 能表示的最小值是±5 x 10 -324  

整数:
           在JavaScript中10进制的整数由数字的序列组成
           精确表达的范围是
-9007199254740992 (-253) 到 9007199254740992 (253)
           超出范围的整数,精确度将受影响
浮点数:
           使用小数点记录数据
           例如:3.4,5.6
           使用指数记录数据
           例如:4.3e23 = 4.3 x 1023

<script>
            var a = 11;     //整数
            var a = 1.1;    //浮点型
            var a = .1;     //表示的是0.1
            var a = 10.0;   //整数,解析成10
            var a = 10.;    //只要小数点后面没有数字,就解析成10
            var a = 3.12e7; //科学计数法 31200000
</script>

字符串类型:

是由Unicode字符、数字、标点符号组成的序列;字符串常量首尾由单引号或双引号括起;
字符串中部分特殊字符必须加上右划线\;常用的转义字符 \n:换行 \':单引号 \":双引号 \\:右划线

var b = "aaa"
var c = 'aaa'

boolean:

Boolean类型仅有两个值:true和false,也代表1和0,实际运算中true=1,false=0
布尔值也可以看作on/off、yes/no、1/0对应true/false
Boolean值主要用于JavaScript的控制语句,例如:

if (Ture){
      alert(1);
}else{
      alert(2);
      }

Undefined类型

Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。

当函数无明确返回值时,返回的也是值 "undefined";

Null类型

另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。

尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。

运算符:

算术运算符:
    +   -    *    /     %     

比较运算符:
    >   >=   <    <=    !=    ==    ===   !==

逻辑运算符:
     &&   ||   !

赋值运算符:
    =  +=   -=  *=   /=  ++ --

字符串运算符:
    +  连接,两边操作数有一个或两个是字符串就做连接运算

算术运算:

<script>
        // 算术运算符
        // + -  *  / %(取余)
        // 当不是数字之间的运算时
        // +号两边一旦有字符串,那么+号就不在是数学运算了
        // 而是拼接,最终结果是字符串
        // -/% 会尽量将字符转换成数字(隐式类型转换),当无法转换是,就会生成NaN.
        // NaN:Not a number
        var a = "a";
        var b = 6;
        console.log(a%b);  返回NaN
        console.log(typeof (a%b));  返回number
</script>

赋值运算:

<script>
        // += -=  *= /= %=
        // ++ -- 两个都存在隐式类型转换,会全部转换为数字
        // ++x  运行之前加1
        // x++  运行之后加1

        var x = 3;
        var y = ++x;
        alert(x);  4
        alert(y);  4
        var z = x++;
        // alert(z),;   4 而不是5
</script>

关于NaN:

var d="wallace";
    d=+d;
    alert(d);//NaN:属于Number类型的一个特殊值,当遇到将字符串转成数字无效时,就会得到一个NaN数据
    alert(typeof(d));//Number

    //NaN特点:
    
    var n=NaN;
    
    alert(n>3);
    alert(n<3);
    alert(n==3);
    alert(n==NaN);
    
    alert(n!=NaN);//NaN参与的所有的运算都是false,除了!=

比较运算符:

 <script>
            alert(1>2);  //false
            alert(2<30); //ture
            alert(1>=2); //false
            alert(2<=2); //ture
            alert(1!=3); //ture
            alert(1==1); //ture
            alert("1"==1); //ture   js会将字符串数字隐式转换成数值
            alert("1"===1);//false  真正比较是否相等的方案
            alert("1"!==1);//ture
            alert("A"<"a"); //比较ASCII true
            alert("21"<"3"); // true 这种情况,比较的是在ASCII码表的值,“2”是50,"3"是51
 </script>

逻辑运算符:

        <!--针对布尔值 true false-->
        <!--&& 与 两边全为真 结果才为真-->
        <!--|| 或 只要有一个为真 结果就为真-->
        <!--!  非 取反 假变真 真变假-->
        <!--当逻辑运算符,两边不一定是布尔值的时候-->
        <!--&& 遇到假就停,不会进行类型转换-->
        <!--|| 遇到真就停,不会进行类型转换-->
        <!--!隐式类型转换,将后面的数据先转换为bool在取反-->

流程控制

if语句:

if (表达式1) {
    语句1;
}else if (表达式2){
    语句2;
}else if (表达式3){
    语句3;
} else{
    语句4;
}

switch语句:

前端基础之JavaScript前端基础之JavaScript
switch(x){
case 1:y="星期一";    break;  //必须有break, 没有就会一直执行下去
case 2:y="星期二";    break;
case 3:y="星期三";    break;
case 4:y="星期四";    break;
case 5:y="星期五";    break;
case 6:y="星期六";    break;
case 7:y="星期日";    break;
default: y="未定义";
}
View Code

switch比if语句更加简洁明了,但是仅限于知道具体情况时使用。

两者对比:

前端基础之JavaScript前端基础之JavaScript
<script>
        var name = "苏常江";
        if(name === "xiaopo"){
            alert(name + "好漂亮");
        }else if(name === "胡勇平"){
            alert(name + "好帅");
        }else if(name === "吴坤岚"){
            alert(name + "好阔爱");
        }else{
            alert(name + "你是谁");
        }

        //全等判断  break 来阻止代码自动地向下一个 case 运行
        var name = "xiaopo";
        switch(name){//你要判断的变量
            case "xiaopo":
                alert(name + "好漂亮");
                break;
            case "胡勇":
                alert(name + "好帅");
                break;
            case "吴坤岚":
                alert(name + "好阔爱");
                break;
            default:
                alert(name + "你是谁");
                break;

        }
        </script>
View Code

循环语句

for循环一:

    for(初始表达式;条件表达式;自增或自减)
    {
            执行语句
            ……
    }
前端基础之JavaScript前端基础之JavaScript
<script>
        for(var i = 1;i<9;i++){  //

            if (i == 5){
                continue;      //跳过当前循环,进入下一次循环
            }
            else if (i==7){
                break;         //退出循环
            }
            alert(i);
        }
</script> 
for语句1例子

for循环二:迭代数组或对象

for( 变量 in 数组或对象)
    {
        执行语句
        ……
    }

while循环:

while (条件){
    语句1;
    ...
}

do...while循环:

do{  //至少执行一次
            console.log(i);
            i ++;
        }while(i < 9);

异常处理:

try {
    //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
    // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
    //e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
     //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
}

JS对象

在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象,也可以用创建对象的方法定义变量,String、Math、Array、Date、RegExp都是JavaScript中重要的内置对象,在JavaScript程序大多数功能都是基于对象实现的。

//利用N new方法创建对象

var aa=Number.MAX_VALUE; 
//利用数字对象获取可表示最大数
var bb=new String("hello JavaScript"); 
//创建字符串对象
var cc=new Date();
//创建日期对象
var dd=new Array("星期一","星期二","星期三","星期四"); 
//数组对象

关于数字的一些方法:

<script>
        /*
        number 数字
            在js中的小数和整数统一是数字,-2^53-2^53,超出范围就会不精确
        number方法
            Number()--参数中必须为能转换的转换的数字,否则返回NaN,将字符串类型的数字转换成number
            parseInt(解析的参数) -- 将参数转换为数字,整数部分遇到不少数字就停
            parseFloat()--将参数转换为数字,不是数字就停,否则直到小数部分遇到不少数字就停
            Num.toFixed(n) --- 四舍五入,保留位小数
         */
        a = Number("111");
        alert(typeof(a))
</script>

字符串的方法:

前端基础之JavaScript前端基础之JavaScript
<script>
 x.length;               //----获取字符串的长度
 x.toLowerCase();        //----转为小写
 x.toUpperCase();        //----转为大写
 x.trim();               //----去除字符串两边空格
//----字符串查询方法
x.charAt(index);         //--------获取指定位置字符,其中index为要获取的字符索引
x.indexOf(findstr,index);//----查询字符串位置
x.lastIndexOf(findstr);
x.match(regexp);          //----match返回匹配字符串的数组,如果没有匹配则返回null
x.search(regexp);         //----search返回匹配字符串的首字符位置索引
//示例:
var str1="welcome to the world of JS!";
var str2=str1.match("world");
var str3=str1.search("world");
alert(str2[0]);           // 结果为"world"
alert(str3);              // 结果为15
//----子字符串处理方法
x.substr(start, length);  //----start表示开始位置,length表示截取长度
x.substring(start, end);  //----end是结束位置
x.slice(start, end);      //----切片操作字符串
//示例:字符串切片
var str1="abcdefgh";
var str2=str1.slice(2,4);
var str3=str1.slice(4);
var str4=str1.slice(2,-1);
var str5=str1.slice(-3,-1);
alert(str2); //结果为"cd"  
alert(str3); //结果为"efgh"  
alert(str4); //结果为"cdefg"  
alert(str5); //结果为"fg"
x.replace(findstr,tostr);  //----    字符串替换
x.split();                 //----分割字符串
var str1="一,二,三,四,五,六,日"; 
var strArray=str1.split(",");
alert(strArray[1]);//结果为"二"  
x.concat(addstr)           //----    拼接字符串
</script>
View Code

Array对象:

//创建方式1:
var arrname = [元素0,元素1,….];          // var arr=[1,2,3];

//创建方式2:
var arrname = new Array(元素0,元素1,….); // var test=new Array(100,"a",true);

//创建方式3:
var arrname = new Array(长度); 
//  初始化数组对象:
var cnweek=new Array(7);
cnweek[0]="星期日";
cnweek[1]="星期一";
...
cnweek[6]="星期六";

Array(数组)方法:

<script>
        数组 主要用于存放数据(类似python列表)
        arr.length()
            查看数组内元素的个数
        arr[]
            手动定义一个数组
        arr.push()
            数组最后添加元素
        arr.unshift()
            在数组最前面添加元素
        arr.pop()
            删除数组的最后一个元素
        arr.shift()
            删除数组的第一个元素
     arr.slice()
       切片的和python类似,与前面字符串方法类似
arr.splice() 只有一个参数的时候,会保留参数个数的元素,如 arr.splice(
3) #保留前3个元素 arr.splice(0,2) #从第0位开始,删除两个元素 arr.aplice(2,3,"s") #从第二位开始,的3个元素替换为元素"s" arr.sort() #正向排序 arr.reverse() #反向排序 arr.join("a") 以a来拼接 </script>

DATA对象:

<script>
        var data = new Date();
        //生成一个时间对象,返回当前本地时间
        alert(data);
        var strap = data.getTime();
        //返回时间戳
        alert(strap);
        var year = data.getFullYear();
        //获取年份
        alert(year);
        var month = data.getMonth()+1;
        //获取月份,返回的是美国,美国从0开计数,所以加1
        alert(month);
        var date = data.getDate();
        alert(date);
        //获取日数
        var hour = data.getHours();
        //获取小时数
        alert(hour);
        var minutes = data.getMinutes();
        //获取分钟数
        alert(minutes);
        var seconds = data.get.Seconds();
        //获取秒数
        alert(seconds);
        var day = data.getDay();
        //获取的是一周的第几天0-6
        alert(day)
    </script>

设置时间例子:

前端基础之JavaScript前端基础之JavaScript
//设置日期和时间
//setDate(day_of_month)       设置日
//setMonth (month)                 设置月
//setFullYear (year)               设置年
//setHours (hour)         设置小时
//setMinutes (minute)     设置分钟
//setSeconds (second)     设置秒
//setMillliseconds (ms)       设置毫秒(0-999)
//setTime (allms)     设置累计毫秒(从1970/1/1午夜)
    
var x=new Date();
x.setFullYear (1997);    //设置年1997
x.setMonth(7);        //设置月7
x.setDate(1);        //设置日1
x.setHours(5);        //设置小时5
x.setMinutes(12);    //设置分钟12
x.setSeconds(54);    //设置秒54
x.setMilliseconds(230);        //设置毫秒230
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日5点12分54秒

x.setTime(870409430000); //设置累计毫秒数
document.write(x.toLocaleString( )+"<br>");
//返回1997年8月1日12点23分50秒
View Code

Math对象:

abs(x)    返回数的绝对值。
exp(x)    返回 e 的指数。
floor(x)对数进行下舍入。
log(x)    返回数的自然对数(底为e)。
max(x,y)    返回 x 和 y 中的最高值。
min(x,y)    返回 x 和 y 中的最低值。
pow(x,y)    返回 x 的 y 次幂。
random()    返回 0 ~ 1 之间的随机数。
round(x)    把数四舍五入为最接近的整数。
sin(x)    返回数的正弦。
sqrt(x)    返回数的平方根。
tan(x)    返回角的正切。

//方法练习:
        //alert(Math.random()); // 获得随机数 0~1 不包括1.
        //alert(Math.round(1.5)); // 四舍五入
        //练习:获取1-100的随机整数,包括1和100
             //var num=Math.random();
             //num=num*10;
             //num=Math.round(num);
             //alert(num)
        //============max  min=========================
        /* alert(Math.max(1,2));// 2
        alert(Math.min(1,2));// 1 */
        //-------------pow--------------------------------
        alert(Math.pow(2,4));// pow 计算参数1 的参数2 次方.

Function对象:

<script>
        /*
        函数是由事件驱动的或者当它被调用时执行的可重复操作的代码块
        函数就是包裹在花括号中的代码块,前面使用了关键字function:
            有名函数:
                有名字的函数
                    函数名加括号执行/充当事件函数执行
            匿名函数:
                没有名字的函数
                    匿名函数不能单独出现 一般充当事件函数
          */
        var oBox = document.getElementById("box");
        var oBox1 = document.getElementById("box1");
        // 匿名函数 :靠点击触发,即点击后就执行该函数
        oBox.onclick = function () {
            alert("oBox")
        };
        //定义一个名为fn的函数
        function fn() {
            alert(1)
        }
        //函数调用
        oBox1.onclick = fn;//注意在这能加括号,靠点击执行,加括号会自动执行

</script>

函数定义:

<script>
        /*
        函数表达式:
            特点:可以在后面加括号立即执行
            () + - !~ 可以将匿名函数变为函数表达式
        */
        fn();
        function fn() {
            alert(1)
        }    //函数定义 可以在定义前加括号执行,也可以在定义后加括号执行
        /*
        js里面函数和变量的执行规则:
        1.找会率先找函数,和变量名,变量赋值操作不马上执行
        2.执行按照顺序执行
        就上面例子:会先找到定义的函数fn,然后从上而下执行
        */
        //函数表达式
        //fn2();  //下面定义的一函数相当于变量赋值,先找的是变量名
        //所以上面的fn2不会执行,必须在后面才执行
        var fn2 = function () {
            alert(2)
        };
        fn2();
        //() + - !~ 可以将匿名函数变为函数表达式
        +function () {
            console.log(3)
        }();
</script>

函数的参数:

<script>
        /*
        我们在使用函数时,加括号导致的函数执行时,可以传递函数
            形参
            实参
            不定参
        */
        var s = 99;
        fun(s);     //s是传递的实参
        function fun(n) { //n表示形参
            //形参相当于变量
            alert(n)
        }
        //实参和形参都可以有多个用逗号隔开
        fun1(1);
        function fun1(n,m) {
            m = m||0;  //设置默认值为0
            alert(n+m)
            /*
             注意:实参和形参的个数不一定要一致,所以在传参的时候需要一一对应
             当实参个数大于形参时候,会传入形参的个数,多余的不传
             当实参个数少于形参时候,会返回NaN
             当然在实参少于形参的时候,可以设置默认值
             */
        }
    sum(1,2,3,4,5,6);
    function sum() {
      /*
      当传入的参数不知道多少个时,可以用arguments将其
      封装,运用下标是方式进行调用,也可以用for循环进行调用
      */
 alert(arguments[4])

      }
</script>

return与作用域问题:

<script>
        /*
        每个函数默认返回 return undefined
         */
        var oBox = document.getElementById("box");
        function fun() {
            alert(1);
            return 2
        }
        var a = fun();
        alert(a)

/*
        js的解析顺序
            1.定义先解析 var function 参数
                a.该步骤的var只定义变量,后面的赋值不解析
                b.该步骤的函数只定义函数,函数的执行不解析
                c.重名的只留一个,var 和 function重名,函数优先
            2.执行 再从上而下执行其他代码
        作用域:和python类似

         */
</script>

window对象:

所有浏览器都支持 window 对象。
概念上讲.一个html文档对应一个window对象.
功能上讲: 控制浏览器窗口的.
使用上讲: window对象不需要创建对象,直接使用即可.

常见的window对象方法:

alert()            显示带有一段消息和一个确认按钮的警告框。
confirm()          显示带有一段消息以及确认按钮和取消按钮的对话框。
prompt()           显示可提示用户输入的对话框。

open()             打开一个新的浏览器窗口或查找一个已命名的窗口。
close()            关闭浏览器窗口。

setInterval()      按照指定的周期(以毫秒计)来调用函数或计算表达式。
clearInterval()    取消由 setInterval() 设置的 timeout。
setTimeout() 在指定的毫秒数后调用函数或计算表达式。 clearTimeout() 取消由 setTimeout() 方法设置的 timeout。
scrollTo() 把内容滚动到指定的坐标。

使用方法:

前端基础之JavaScript前端基础之JavaScript
<script>
    //----------alert confirm prompt----------------------------
    //alert('aaa');

    var result = confirm("您确定要删除吗?");
    alert(result); 

    //prompt 参数1 : 提示信息.   参数2:输入框的默认值. 返回值是用户输入的内容.

    // var result = prompt("请输入一个数字!","haha");
    // alert(result);


    //方法讲解:
    // open方法 打开和一个新的窗口 并 进入指定网址.参数1 : 网址.
    //调用方式1
    open("http://www.baidu.com");
    //参数1 什么都不填 就是打开一个新窗口.  参数2.填入新窗口的名字(一般可以不填). 参数3: 新打开窗口的参数.
    open('','','width=200,resizable=no,height=100'); // 新打开一个宽为200 高为100的窗口
    //close方法  将当前文档窗口关闭.
    //close();
    
</script>
View Code

定时器的使用:

<script>
        setTimeout(function () {   //延时定时器,1000毫秒后执行一次,且仅能执行一次
            alert(1)
        },1000);
        setInterval(function(){    //每1000毫秒执行一次,反复执行
            alert(1)
        },1000);
        function fn() {
            alert(2)
        }
        setTimeout(fn,1000);
</script>

对定时器清除:即为了不让重复的定时器进行清除

<script>
        var aTime = document.querySelectorAll("div p span");
        var num = 5;
        var time;
        time = setInterval(function () {       设置定时器
            num--;
            aTime.innerHTML = num +"s";
            if (num === 1){
                clearInterval(time);           清除定时器
                window.location.href = "http://www.baidu.com";  //当前窗口跳转到
            }
        },1000)

</script>

object对象:

<script>
        var obj = {"name":"wallace","age":20,"gender":"gile"};  //创建obj对象
        for (var key in obj){                   //迭代obj对象
            alert(key);//键的名称
            alert(obj[key]) //对应键的值
        }
</script>

 

JSON对象:

<script>
        /*
        JSON:轻量级的数据交互格式,它实际在传输的时候都是字符串,
        所有语言基本上都有字符串,可以传递
        js对象:是一种js数据类型,是js特有的,无法跨语言数据交互

        JSON语法规则:
        1.json数据格式的属性(键和值)的值都为双引号‘
        2.值;整数,浮点数(小数),字符串,布尔,数组,对象

        JSON用js定义:
        通过字符串来定义
            var obj = '{"name";"wallace"}'
        通过js对象来定义,最后传输的时候将对象转换为字符串
            var obj = {"name":"wallce"}
            JSON.stringify(obj)
        JSON字符串解析为js对象
         */
        var obj= '{"name":"wallace"}';
        var obj2 = JSON.parse(obj)
        alert(obj2)
    </script>

DOM对象:

关于HTML和DOM

  •     HTML  Document Object Model(文档对象模型)
  •     HTML DOM 定义了访问和操作HTML文档的标准方法
  •     HTML DOM 把 HTML 文档呈现为带有元素、属性和文本的树结构(节点树)

DOM树: 画dom树是为了展示文档中各个对象之间的关系,用于对象的导航。

前端基础之JavaScript

 


DOM节点:

HTML 文档中的每个成分都是一个节点。

DOM 是这样规定的:
    整个文档是一个文档节点 
    每个 HTML 标签是一个元素节点 
    包含在 HTML 元素中的文本是文本节点 
    每一个 HTML 属性是一个属性节点

 

前端基础之JavaScript

 

 

节点树中的节点彼此拥有层级关系。
父(parent),子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  •     在节点树中,顶端节点被称为根(root)
  •     每个节点都有父节点、除了根(它没有父节点)
  •     一个节点可拥有任意数量的子
  •     同胞是拥有相同父节点的节点

下面的图片展示了节点树的一部分,以及节点之间的关系:

前端基础之JavaScript

节点(html元素)查找:

<!--如何操作JS页面:-->
        <!--其实,要操作页面,就是操作标签,JS要操作标签,就要先获取标签-->
        <!--获取标签:-->
            <!--document.title-->
            <!--document.head-->
            <!--document.body-->
        <!--其他标签的获取,id前面必须是document,其他的前面可以是某个元素(id,document),-->
    <!--但不能是集合通过id获取元素;-->
        <!--通过id获取元素:-->
            <!--document.getElementByID()-->
        <!--通过class获取元素-->
            <!--document.getElementsByClassName()-->
        <!--通过标签获取元素-->
            <!--document.ElementByTagName()-->
        <!--通过选择器的写法获取元素(不兼容IE7及以下)-->
            <!--document.querySelector()-->
            <!--document.querySelectorAII()-->
        <!--通过name值获取-->
            <!--document.getElementByName()-->
<script>
        document.title = "我想把标题该了";
        //修改别的标签的内容,得用innerHTML(会解析标签),innerText(不会解释标签)
        document.body.innerHTML += "<b>我很好啊</b>";
        // document.body.innerText += "<b>我不会别解析</b>";
        // innerText不会解析标签,如果存在后面的标签都不会被解析
        // a = a +10; a += 10;
        // 获取的是确切的是某个元素,可以直接操作这个元素
        // var oBox = document.getElementById("box");
        // oBox.innerHTML = "<b>ahhh</b>";
        // var oBox = document.getElementById("box");
        // oBox.innerHTML = "<b>66666</b>";

        //获取的是一堆元素的集合,设置操作的时候要通过下标拿到对应的某一个
        var oBox1 = document.getElementsByClassName("box");
        oBox1[0].innerHTML += "<b>我是一个别名</b>";

        var oP  = document.getElementsByTagName('p');
        alert(oP.length);  //length获取长度
        oP[0].innerHTML += "<b>标签名字获取</b>";
        oP[3].innerHTML += "<b>第三个标签名</b>";

        var oI1 = document.querySelectorAll("#box1 i");
        oI1[1].innerText += "qqqqqqq";
</script>

通过导航节点来获取元素标签:

parentElement           // 父节点标签元素

children                // 所有子标签

firstElementChild       // 第一个子标签元素

lastElementChild        // 最后一个子标签元素

nextElementtSibling     // 下一个兄弟标签元素

previousElementSibling  // 上一个兄弟标签元素

html元素操作CRUD

createElement(标签名) :创建一个指定名称的元素。
追加一个子节点(作为最后的子节点)

somenode.appendChild(newnode)
把增加的节点放到某个节点的前边

somenode.insertBefore(newnode,某个节点);

removeChild():获得要删除的元素,通过父元素调用删除
somenode.replaceChild(newnode, 某个节点);

html元素属性操作:

<a href="4.获取元素补充.html" target="_blank" class="box" id="box" tz="xp">去百度</a>
<script>
        // js操作元素的标签属性:
        //     规范的标签属性:
        //         符号直接操作(可读可写)
        //     不规范(自定义)的标签属性
        //         获取:.getAttribute
        //         设置:.setAttribute
        //         移除:.removeAttribute
        // 注意:
        // 所有的路径,颜色 获取的结果不一定是你写的内容
        // 通过id获取的元素赋值给变量后,假设修改了id,这个变量还是表示这个元素
        // 自定义标签属性的操作方式,同样可以操作符合规范的标签属性
        var oA = document.getElementById("box");
        // alert(oA.target);//可读
        oA.target ="_self";//修改
        // oA.id = box1;
        // alert(oA.id);
        oA.href = "http://www.baidu.com";
        oA.tz = "dafsd";
        // alert(oA.target);
        // oA.setAttribute("target","_self");//直接修改
        oA.setAttribute("py","web");
</script>

//通过class获取的时候可能是多个值,所以对于class有其他的操作
elementNode.className
elementNode.classList.add
elementNode.classList.remove

Event事件:

<script>
        // 所谓事件,是指JAVAscript捕获到用户的操作,并作出正确的响应,在事件函数里面
        // 有个关键字this,代表当前触发事件的这个元素事件:用户的操作
        // 元素.事件 = 函数
        // 鼠标事件。
        //     左键单击 onclick()
        //     左键双击 ondblclick()
        //     鼠标移入 onmouseover()/onmouseenter()
        //     鼠标移除 onmouseout()/onmouseleave()
        var oBox = document.getElementById("box");
        //被点击后函数后面的代码会被执行
        oBox.onclick = function () {
            console.log("我别点击了");
            this.innerHTML += "我被点击了";
        };
        //移入后后面的代码会别执行
        oBox.onmouseenter = function () {
            console.log("我移入进去");
            this.innerHTML += "我被移入了"
        };

        oBox.onmouseleave = function () {
            console.log("鼠标移除")

        }
</script>

对事件进行汇总:

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。

onfocus        元素获得焦点。               练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)

onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。

onload         一张页面或一幅图像完成加载。

onmousedown    鼠标按钮被按下。
onmousemove    鼠标被移动。
onmouseout     鼠标从某元素移开。
onmouseover    鼠标移到某元素之上。
onmouseleave   鼠标从元素离开

onselect       文本被选中。
onsubmit       确认按钮被点击。

绑定事件的方式:

//方法一
<div id="div" οnclick="foo(this)">点我呀</div>

<script>
    function foo(self){           // 形参不能是this;
        console.log("点你大爷!");
        console.log(self);   
    }
</script>

//方法二

<p id="abc">试一试!</p>

<script>

    var ele=document.getElementById("abc");

    ele.onclick=function(){
        console.log("ok");
        console.log(this);    // this直接用
    };

</script>

关于this:this一般指的是操作标签本身