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

一、  什么是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>

页面显示效果:


 


  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值