javaScript中的对象、BOM、DOM知识点总结

    xiaoxiao2021-03-27  51

    一、  什么是javaScript对象?

            对象是javaScript中最重要的API。

            javaScript包含多种对象有:内置对象、外部对象(window对象、dom对象)、自定义对象。

    二、  如何使用对象?

            对象包含属性和方法。

            访问对象属性:对象.属性

            访问对象方法:对象.方法()

    三、  常用内置对象

            JS中常用内置对象有:String对象、Number对象、Boolean对象、Array对象、Math对象、Date对象、RegExp对象、Function对象。

    1.   String对象

    (1)创建String对象有两种方式:

    var str1=”hello word”;

    var str2=new String(“hello word”);

    (2)String对象的属性:

    str.length;

    (3)String对象的常用方法

    ##大小写转换方法

    str1.toLowerCase()、str1.toUpperCase()

    ##获取指定字符

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

    str1.charCodeAt(index):返回指定位置字符的Unicode编码。(index表示字符位置)

    ##查询指定字符串

    str1.indexOf(findstr,[index])、str1.lastIndexOf(findstr,[index])

    PS:findstr表示要查询的字符串,lastIndexOf表示从最后开始找起,如果没有找到则返回-1.

    ##获取子字符串(含头不含尾,下标均是从0开始)

    str1.substring(start,[end])

    ##替换子字符串

    str1.replace(findstr,tostr)

    PS:findstr为要找的子字符换,tostr替换为的字符串,返回替换后的字符串。

    ##拆分子字符串

    Str1.split(bystr,[howmany])

    PS:bystr分割用的字符串,howmany指定返回的数组的最大长度,可以省略,返回分割后的字符串。

    注意:字符串是不可变的,一些可以修改的字符串的API,实际上是返回一个新的字符串,并不改变原始字符串.

    2.Number对象

    (1)Number是数值对象,创建Number对象如下:var a=1.1;

    (2)Number对象的常用方法

    ##toFixed(num):转换为字符串,并保留小数点后一定位数。如果必要该数字可以被舍弃,也可以用0补足。

    3.Array对象

    ##JS中的数组均是Object,如var a1=[1,25,"男朋友",true];

    数组的长度是可变的。

    ##JS中的数组可以像集合一样操作

    var a2=new Array();

       a2.push(8);

       a2.push(false);

       console.log(a2[2]);

    ##访问数组元素console.log(a1[0])

    ##数组中元素倒转:a1.reverse();

    ##数组排序*重点*:a1.sort();默认按照字符串的Unicode编码排序,可以通过替换比较方法影响排序结果。(一般比较方法无需复用,采用匿名方法)

    举例如下:

    a1.sort(Function(a,b){

    return a-b;

    });

    Console.log(a1);

    4.Math对象

    Math对象用于执行数学任务,无需创建,直接使用即可。如下所示:

    console.log(Math.PI);console.log(Math.E);

    console.log(Math.round(Math.PI));

    PS:Math.round()表示为取整。

    5.Date对象

    Date对象用于处理日期和时间,封装了系统时间毫秒数。

    ##创建Date对象(Date对象会自动把当前的日期和时间保存为初始值)

    Datedate1=new Date();

    Datedate2=new Date(“2015/1/1 1:12:11”);

    ##Date对象常用方法

    读写时间毫秒数:date1.getTime()、date1.setTime(毫秒)

    读写时间分量:

    date1.getDate()、date1.getDay()、date1.getFullYear()等。

    date1.setDate()、date1.setDay()、date1.setFullYear()等。

    转化为字符串:

    toString()、toLocaleTimeString()、toLocaleDateString()

    6.RegExp对象

    RegExp对象表示正则表达式,作用也就是用来检查字符串。

    ##创建RegExp对象

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

    VarrgExp=/pattern/flags;

    PS:flags的标识有两种

    (1)   g:设定当前匹配为全局模式。

    (2)   i:忽略匹配中的大小写检测。

    注意:全局模式(第N次调用则找出第N个匹配的部分),非全局模式(找出首次匹配的部分)。

    ##RegExp对象的常用方法

    RegExpObject.test(string)*重点*

    如果字符串string中含有与RegExpObject匹配的文本,则返回true,否则返回false.

    reg.exec(str):检测字符串中指定的值,返回指定的值。

    reg.test(str):检测字符串中指定的值,返回false或true.

    ##String对象与正则表达式(regexp代表正则表达式或字符串)

    --x.replace(regexp,tostr),返回替换后的结果。

    --x.match(regexp),返回匹配字符串的数组。

    --x.search(regexp),返回匹配字符串的首字符位置索引。

    7.Function对象

    JS中的函数就是Function对象。

    函数名就是指向Function对象的引用,使用函数名可以访问函数对象,函数名()是调用函数。

    ##定义函数对象

    函数的返回值默认为undefined,也可以使用return返回具体的值。

    ##函数的参数

    JS的函数没有重载。

    调用时只要函数名一样,无论传入多少个参数,调用的都是同一个函数。

    没有接收到实参的参数值是undefined.

    所有的参数传递给arguments数组对象。

    ##arguments对象*重点*..

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

    在函数代码中,可以使用arguments访问所有参数。

    arguments.length:函数的参数个数

    arguments[i]:第i个参数

    可以利用arguments实现可变参数的函数。

    ##eval函数*重点*

    eval函数用于计算表达式字符串,或者用于执行字符串中的javascript代码。

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

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

    小案例

    1.登录页面的代码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> <style>     .ok {        color:green;        border:1px solid green;     }     .error {        color:red;        border:1px solid red;     }      </style> <script> //校验账号的格式    function check_code() { console.log(1); //获取账号 var code=document.getElementById("code").value; //校验其格式(\w 字母或数字或下划线) var span=document.getElementById("code_msg"); var reg=/^\w{6,10}$/; if(reg.test(code)){ //通过,增加OK样式 span.className="ok"; return true; }else{ //不通过,增加error样式 span.className="error"; return false; } } </script> <script> //校验密码   function check_pass() { //获取密码 var pass=document.getElementById("pass").value; //校验 var span=document.getElementById("pass_msg"); var reg=/^\w{8,20}$/; if(reg.test(pass)){ //通过,增加OK样式 span.className="ok"; return true; }else{ //没通过,增加error样式 span.className="error"; return false; } } </script> </head> <body>    <!--check_code() && check_pass(),中的与&&会发生短路,为防止短路,可以利用一个boolean值中的true值为1,false值为0进行改进-->    <form action="http://www.tmooc.cn" οnsubmit="return check_code()+check_pass()==2;">        <p>                                  账号:             <input type="text" id="code"               οnblur="check_code();"/>             <span id="code_msg">6-10位字母、数字、下划线</span>        </p>        <p>                                  密码:            <input type="password" id="pass"            οnblur="check_pass();"/>            <span id="pass_msg">8-20位字母、数字、下划线</span>        </p>        <p><input type="submit" value="登录"/></p>       </form> </body> </html>

    补充:onsubmit,表单提交事件,是form的事件,当点击表单内的submit按钮时触发,在该事件内返回true,则提交成功,默认就是返回true,若返回false,则不提交。

    网页效果显示:

    2.计算器代码:

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>计算器</title> <script>    function cal() {  //获取文本框  var input=document.getElementById("num");  //获取span  var span=document.getElementById("jg");  //获取框内的算式  var ss=input.value;  try {  var result=eval(ss); //计算成功,将结果写入文本框input span.innerHTML=result;  }catch(e) {  //出错时给予提示 span.innerHTML="Error";  }    } </script> </head> <body>     <input type="text" id="num"/>     <input type="button" value="=" οnclick="cal();"/>     <span id="jg"></span> </body> </html>

    网页效果显示:

    四、  外部对象

         浏览器提供的对象,浏览器的API,用来操作浏览器。

    1.BOM(Browser Object Model):

         #浏览器对象模型,用来访问和操纵浏览器窗口,使JAVAScript有能力与浏览器“对话”。(浏览器与JS是两个不相关的内容,JS依附于浏览器上)

    #通过使用BOM,可移动窗口、更改状态栏文本,执行其他不与页面内容发生直接联系的操作。

    2.DOM(Document Object Model):

         #文档对象模型,用来操作文档。定义了访问和操作HTML文档的标准方法。

         #应用程序通过对DOM树的操作,来实现对HTML文档数据的操作。

    BOM与DOM关系如下图示:

          PS:window代表浏览器,它的子对象(属性)代表浏览器的不同部位。

    外部对象分为两个部分BOM与DOM,其中BOM包含DOM.

    3.window对象(BOM)

          window表示浏览器窗口,所有JAVAScript全局对象、函数以及变量均自动成为window对象的成员。

    ##常用属性:

    #history:浏览过窗口的历史记录对象

           history对象包含用户(在浏览器窗口中)访问过的URL,常用方法:

    --back()

    --forward()

    --go(num):num可以取正数或者负数,正数表示前进,负数表示后退。

    #location:窗口文件地址对象。

    location对象常用于获取和改变当前浏览器的网址。

    href:当前窗口正在浏览器的网页地址,也可以用于修改网址。

    --reload():重新载入当前网址,就像按下刷新按钮。

    PS:location与超链接都可以改变当前窗口,两者的区别是---location改变当前窗口时可以添加条件,比如可以在页面上显示“您确定要离开此页面吗?”,而超链接不能添加条件,不灵活,一般建议采用location。

    显示小代码:

    functiontarena() {

       var b=confirm("您确定要离开此页面吗?");

       if(b){

            //确认为true时,跳转。

            //location=地址栏

            //修改href就是修改网址。

            location.href="http://www.tmooc.cn";

        }

         }

     #screen:当前屏幕对象。

            screen对象包含有关客户端显示屏幕(比如说ipad、笔记本电脑、手机)的信息,常用于获取屏幕的分辨率和色彩,常用属性:

    --width/height

    --availWidth/availHeight

    #navigator:浏览器相关信息。

    常用于获取客户端浏览器和操作系统信息。

    Navigator.userAgent;

    ##常用方法:

    (1)alter(str),提示对话框,显示str字符串的内容。

    (2)confirm(),确认对话框,显示str字符串的内容,按确定按钮返回true,其他操作返回false.

    (3)定时器*重点*

    多用于网页动态时钟、制作倒计时、跑马灯效果等。分为两种:

    #周期性定时器:以一定的间隔执行代码,循环往复。

    setInterval(exp,time):周期性触发代码exp.返回已经启动的定时器对象。

    exp为执行语句,time为时间周期,单位为毫秒。

    clearInterval(tID):停止启动的定时器。

    tID:启动的定时器对象。

    小案例:动态时钟代码如下:

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>动态时钟</title> <style>     #clock {         width:150px;         border:1px solid red;         line-height:30px;         height:30px;         font-size:20px;         text-align:center;     } </style> <script>      //id为空时表示未启动。      var id=null;      function ks(){     //若id非空,表示已启动,不要再次启动了     if(id){     return;     }     id=setInterval(function(){     var date=new Date();     var now=date.toLocaleTimeString();     var p=document.getElementById("clock");     p.innerHTML=now;     },1000);      }      function zt(){     clearInterval(id);     //将id重置为null,便于下次启动时做判断     id=null;      } </script> </head> <body>    <p>        <input type="button" value="开始" οnclick="ks();">        <input type="button" value="暂停" οnclick="zt();">    </p>    <p id="clock"></p> </body> </html>

    网页显示如下图:

    #一次性定时器:在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。

    setTimeout(exp,time):一次性触发代码exp.返回已经启动的定时器。

    exp为执行语句,time为时间间隔,单位为毫秒。

    clearTimeout(tID):停止启动的定时器。

    小案例:发送消息代码如下:

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>发送消息</title> <style>      #msg {         width:150px;         height:30px;         line-height:30px;         border:1px solid red;         font-size:20px;         text-align:center;      } </style> <script>     //默认id为null     var id=null;     function fs() {     var p=document.getElementById("msg");     p.innerHTML="正在发送...";     //启动定时器后id非空     id=setTimeout(function(){     p.innerHTML="发送成功";     //发送成功是id为null            id=null;     },3000);     }     function cx(){     //id非空时表示已启动定时器但未完成,只有此时才能停止定时器。     if(id){     var p=document.getElementById("msg");     p.innerHTML="已撤销";     clearTimeout(id);     }     } </script> </head> <body>    <p>       <input type="button" value="发送" οnclick="fs();"/>       <input type="button" value="撤销" οnclick="cx();"/>    </p>    <p id="msg"></p> </body> </html>

    网页显示如下图:

    4.document对象

    4.1  DOM(文档对象模型)

    当网页被加载时,浏览器会创建页面的文档对象模型。

    DOM节点树(DOM模型被构造为对象的树,这棵树的根就是document对象)

     

    #DOM操作:查找节点、读取节点信息、修改节点信息、创建新节点、删除节点。

    4.2          读取、修改

    ##读取节点的名称和类型

    #nodeName:节点名称

    --元素节点和属性节点:标签或属性名称。

    --文本节点:永远是#text.

    --文档节点:永远是#document

    #nodeType:节点类型(返回数值)

    元素节点返回1,属性节点返回2,文本节点返回3,注释节点返回8,文档节点返回9.

    ##读写节点的内容(<x>这就是内容</x>),双标签中间的文本。

    #innerHTML:设置或获取位于对象起始和结束标签内的HTML(带标签)。

    #innerText:设置或获取位于对象起始和结束标签内的文本(不带标签)。

    ##读写节点的属性

    #通用API,任何版本浏览器都支持

    getAttribute()方法:根据属性名称获取属性的值。

    setAttribute(),removeAttribute().

    #新的API,低版本的浏览器不支持(只要增和改)

    节点.属性名(class例外,需要写className)

    小案例:图片轮播代码演示如下

    PS:凡是在funciton外的方法,读取时均是按照顺序读取。

    4.3查询

    ##通过id查询(标准)

    document.getElementById(),通过制定的ID来返回元素节点,忽略文档的结构,如果ID错误,则返回null。

    ##根据标签名查询(标准)

    #在整个页面上根据标签名查询节点。

    document.getElementsByTagName(“li”),

    #在某节点下根据标签名查询其子节点。

    ul. getElementsByTagName(“li”),

    PS:”li”为要查询的子节点。

    ##根据name查询(标准)

    document.getElementsByName().

    ##根据class查询某节点(非标准)

    getElementsByClassName(),

    ##根据层次(关系)查询

    #查询父亲(标准)

    parentNode

    #查询孩子(标准)

    childNodes.

    getElementsByTagName(“li”),建议使用此根据标签名查询孩子的方法。

    #查询孩子(非标准)

    children.

    #查询兄弟(标准)

    //某节点.父亲.孩子[n]

    jd.parentNode. getElementsByTagName(“li”)[1];

    #查询兄弟(非标准)

    jd.previousElementSibling;

    jd.nextElementSibling;

    4.4增删节点

    ##创建节点

    document.createElement(“li”);

    li为要创建的元素标签名称,返回新创建的节点。

    ##增加节点

    #追加到所有子节点之后

    parentNode.appendChild(newNode);新节点作为父节点的最后一个子节点添加。

     #插入到某子节点之前

    parentNode.insertBefore(newNode,refNode);refNode为参考节点,新节点位于此节点之前添加。

    ##删除节点

    #父亲删孩子

    node.removeChild(childNode);node为childNode的父节点。

    #自己删自己(非标准)

    1sz.parentNode.removeChild("sz");

    2var tj=document.getElementById("tj");

          tj.remove();

    小案例:联动菜单代码:

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>联动菜单</title> </head> <body>        省:    <select id="province" οnchange="chg();">         <option value="-1">请选择</option>         <option value="0">河北省</option>         <option value="1">山东省</option>         <option value="2">山西省</option>    </select>    市:    <select id="city">         <option>请选择</option>    </select>        <script>       //模拟加载城市       function loadCities() {      return [          ["石家庄","廊坊","保定"],          ["济南","青岛","德州"],          ["太原","大同","阳泉"]              ];       }      var cities=loadCities();            function chg() {     //获取省份的下拉选     var sel1=document.getElementById("province");     //获取省份的序号     var pindex=sel1.value;     //获取该省份对应的城市     var pcities=cities[pindex];     //先删除城市下拉选内所有的城市     var sel2=document.getElementById("city");     //     //sel2.innerHTML="<option>请选择</option>";     var options=sel2.getElementsByTagName("option");     for(var i=options.length-1;i;i--){     sel2.removeChild(options[i]);     }     //再增加该省份的城市。     if(pcities){     for(var i=0;i<pcities.length;i++){     var opn=document.createElement("option");     opn.innerHTML=pcities[i];     sel2.appendChild(opn);     }     }      }    </script> </body> </html>

     网页显示效果如下:

    五、自定义对象

    自定义对象是一种特殊的数据类型,由属性和方法封装而成。

    ---属性指与对象有关的值:对象名.属性名。

    ---方法指对象可以执行的行为或者可以完成的功能:对象名.方法名()

    1.创建自定义对象

    (1)采用直接量(JSON"JavaScript Object Notation"是一种轻量级的数据交换格式)的方式创建自定义对象

    名称需要使用“”引起来,多对定义之间使用,隔开,名称可以是属性。

    function f1() {   var stu= {"name":"zs","age":25,"work":function(){alert("我学Java")}};   alert(stu.name);   alert(stu.age);   //work的function方法无返回值,则不需要加alert。   stu.work();    }

    (2)采用构造器创建对象

    ##采用自定义构造器创建对象(自定义了一个构造器Coder,然后每次写时都可以调用Coder构造器)

    function f3() {   var c=new Coder("lisi",26,function(){alert("我写Java")});   alert(c.name);   alert(c.age);   c.work();    }    function Coder(name,age,work) {   //this=创建出来的对象   //this.name给该对象声明一个属性   this.name=name;   this.age=age;   this.work=work;    }

     六、事件

     1.事件概述

           事件:指页面元素状态改变,用户在操作鼠标或者键盘时触发的动作。分为鼠标事件、键盘事件、状态改变事件。

           event对象:事件触发后将会产生一个event对象。

           事件属性:通过一个事件属性,可以在某个事件发生时对某个元素进行某种操作。

    2.事件定义

        (1)直接定义事件:在html属性定义中直接处理事件。

        <input type="button" value="小苹果" οnclick="alert('小苹果 ');"/>

       (2)后绑定事件//:在页面加载后执行,写在<body>的整个页面后。(过度的,仅需要了解)

       (3)后绑定事件(onload):onload是网页加载事件,在网页加载后自动触发。

        为了便于格式的完美性,该段代码,放在<head>中的<script>标签中。

    window.οnlοad=function() {   //在这里写的代码相当于在body后一样   var c=document.getElementById("c");   c.οnclick=function() {   alert("小姑娘");   }        }

    (4)取消事件

    e.stopPropagation() e.cancelBubbule=true; e={"stopPropagation":function(){}} e.stopPropagation()/e.stopPropagation 对象的方法可以看做方法的属性     if(e.stopPropagation){     //如果写成e.stopPropagation(),则没有的话会报错,不带括号的属性没有的话不会报错。     e.stopPropagation();     }else{     e.cancelBubble=true;     }     } 3.event对象

         ##任何事件出发后都将产生一个event对象,event对象记录事件发生时的鼠标位置、键盘按键状态、触发对象等信息。

        ##获得event对象,使用event对象获得相关信息,如单击位置、触发对象等。

       ##常用属性:clientX,clientY,cancleBubble

        ##获取event对象,

        在事件定义时,使用event关键字将事件对象作为参数传入方法。

    <input type="button" value="DDD" οnclick="d(event);"/>

    <input type="button" value="EEE" id="e"/>

    window.οnlοad=function() {   var ee=document.getElementById("e");   ee.οnclick=function(e) {   //后绑定事件时,浏览器会自动传入event,   //且该对象存在arguments第0个位置。  console.log(arguments[0]);   console.log(e);   }    }        function d(e) {   console.log(e);   alert(e.clientX+","+e.clientY);    }

    4.事件处理机制

    (1)JS事件处理机制是:冒泡机制(JS的事件是由内向外触发的,触发到最外层为止)

    (2)作用:不需要再子元素上定义N次事件,只需要在父元素上定义一次事件。

     PS:在采用冒泡机制简化事件时,必须知道事件源(事件发生的源头“具体位置”),事件源可以通过事件对象获取。

    案例:计算器代码如下

    <!DOCTYPE html> <html>   <head>     <title>计算器</title>     <meta charset="utf-8" />     <style type="text/css">       .panel {         border: 4px solid #ddd;         width: 192px;         margin: 100px auto;         /*border-radius: 6px;*/       }       .panel p, .panel input {         font-family: "微软雅黑";         font-size: 20px;         margin: 4px;         float: left;         /*border-radius: 4px;*/       }       .panel p {         width: 122px;         height: 26px;         border: 1px solid #ddd;         padding: 6px;         overflow: hidden;       }       .panel input {         width: 40px;         height: 40px;         border:1px solid #ddd;       }     </style>     <script>        window.οnlοad=function() {       var div=document.getElementById("panel");       div.οnclick=function(e) {       //console.log(e.srcElement||e.target);       cal(e);       }        }                function cal(e) {       //获取事件源       var obj=e.srcElement||e.target;       //只处理按钮(INPUT)       if(obj.nodeName!="INPUT"){       return;       }       //判断按钮类型       var p=document.getElementById("screen");       if(obj.value=="C") {       //清空       p.innerHTML="";       }else if(obj.value=="="){       //计算       try {       var result=eval(p.innerHTML);       p.innerHTML=result;       }catch(ex){       p.innerHTML="Error";       }       }else {       //累加                      旧的值                           新的值       p.innerHTML=p.innerHTML+obj.value;       }        }     </script>   </head>   <body>     <div class="panel" id="panel">       <div>         <p id="screen"></p>         <input type="button" value="C">         <div style="clear:both"></div>       </div>       <div >         <input type="button" value="7">         <input type="button" value="8">         <input type="button" value="9">         <input type="button" value="/">                  <input type="button" value="4">         <input type="button" value="5">         <input type="button" value="6">         <input type="button" value="*">                  <input type="button" value="1">         <input type="button" value="2">         <input type="button" value="3">         <input type="button" value="-">                  <input type="button" value="0">         <input type="button" value=".">         <input type="button" value="=">         <input type="button" value="+">                  <div style="clear:both"></div>       </div>     </div>       </body> </html>

    页面显示效果:

     

    转载请注明原文地址: https://ju.6miu.com/read-664402.html

    最新回复(0)