JavaScript DOM 文档对象模型

 

DOM    文档对象模型  Document Object Model

     JavaScript将浏览器及网页文档、HTML元素都使用相应的对象表示

如:window、document、body、forms

这些对象与对象的层次关系称为DOM

 

DHTML  (Dynamic HTML 动态HTML)

        HTML+JavaScript+CSS+DOM的结合使用 称之为DHTML

 

BOM    浏览器对象模型 

 

浏览器对象

window对象    

表示浏览器窗口   对其属性和方法的引用可以省略window.

 

 

 

window对象方法

      alert()方法     

显示包含由应用程序自定义消息的对话框  

 

      confirm()方法   返回true  false

显示一个确认对话框,

 

      prompt()方法    

显示一个提示对话框  其中带有一条消息和一个输入框

确定 返回文本框的值  取消 返回null

 

      close()方法      关闭指定的窗口

      open()方法      打开一个WEB浏览器窗口

   window.location.href="URL"   当前窗口打开新窗口 覆盖当前窗口

      window.open(”打开窗口的url”,”窗口名”,”窗口特征”)

   window.open("about:blank");  //open()最简单使用

      window.open("url","windowName","width=100 height=100 status=yes menubar=no

                            toolbar=no resizable=no location=yes scrollbars=yes");

      height: 窗口高度;

      width:  窗口宽度;

      top: 窗口距离屏幕上方的象素值;

      left:窗口距离屏幕左侧的象素值;

      toolbar: 是否显示工具栏,yes为显示;

      menubar,scrollbars 表示菜单栏和滚动栏。

      resizable: 是否允许改变窗口大小,yes或1为允许

      location: 是否显示地址栏,yes或1为允许

      status:是否显示状态栏内的信息,yes或1为允许

 

 

 

 

 

定时器

  轮询

     Window. setTimeout(函数名,指定时间毫秒数)     

延时执行某个函数 执行一次

 

     clearTimeout(定时器对象名称)      取消执行定时器

 

     setInterval(函数名称,时间毫秒数)      

定时执行指定的函数 间隔为多少毫秒数

 

     clearInterval (定时器对象名称)        取消定时器

 

 

定时器示例:

<script type="text/javascript">

   //setTimeout(函数名,指定时间毫秒数)  延时执行某个函数 执行一次

   //clearTimeout(定时器对象名称)

   var start;

   function showName(){

      document.all["myname"].style.display="block"; 

      start=setTimeout("hideName()",300);

   }

   function hideName(){

      document.all["myname"].style.display="none";

      start=setTimeout("showName()",300);

   }

   function stopTime(){

      if (start != null) {

        clearTimeout(start);

        start=null;

        document.all.btn.value="开始闪烁"

      }

      else

      { 

        start = setTimeout("showName()", 300);

        document.all.btn.value="停止闪烁"

      }

    

   }

</script>

</head>

<body onLoad="showName();">

   <input type="button" onClick="stopTime();" id="btn" value="停止闪烁" />

   <h2>Hello<font id="myname" color="red" style="display:none">肖总</font></h2>

</body>

 

<script type="text/javascript">

   //setInterval(函数名称,时间毫秒数) 定时执行指定的函数 间隔为多少毫秒数

   //clearInterval (定时器名称)  取消定时器

   var num=0;

   var myTimer;

   function show(){

         document.all.myNum.innerHTML=num++;

   }

   function testTimer(){

      if(myTimer!=null )  {

        clearInterval(myTimer);

        num=0;

        myTimer=null;

        document.all.btn.value="开始计时";

      }else{

        myTimer=setInterval(show,100);

        document.all.btn.value="停止计时";

      }

   }

</script>

</head>

<body>

   <h2>计时:<font id="myNum" face="宋体" color="red" >0</font></h2>

   <input type="button" name="btn" οnclick="testTimer();" value="开始计时" />

</body>

</html>

 

其他例子见:js_时间显示器.html  js_跑马灯.html  js_文字滚动.html

 

     

网页对话框

           模式对话框和无模式对话框

 

    window.showModalDialog("URL",传递变量名,"窗口特征")     

建议传递window对象

 

    window.showModelessDialog("URL",传递变量名,"窗口特征")

   

    子窗口访问父窗口数据使用 dialogArguments对象

 

    返回到父窗口的值使用 returnValue

 

 

 

 

 

window对象的子对象属性:

parent对象    

代表对象层次中的父窗口 

 parent对象仅仅是对子窗口有意义

 

self 对象    代表对当前窗口或框架的引用

 

top 对象    代表最顶层的窗口

 

opener对象  

代表创建当前窗口的源窗口 

用于确定open方法打开窗口的源窗口

 

 

location 对象    代表特定窗口的URL信息

   location.replace(url)    刷新 不后退

   location.href="url"      加载 可后退

   window.location.reload();

 

history对象      用于存储客户端最近访问过的网址清单

 

      onClick="javascript:top.mymain.history.forward();">     =history.go(1)

   onClick="javascript:top.mymain.history.back(1);"       =history.go(-1)

   history.go()          刷新 表单不提交

   history.forward()    指向浏览器历史列表中的下一个URL,

                           相当于点击浏览器的“前进”按钮

 

   history.back()       指向浏览器历史列表中的上一个URL,

                           相当于点击浏览器的“后退”按钮

 

 

window.screen  代表浏览器屏幕

       设置浏览器屏幕

     var h=screen.Height;    //屏幕高度

     var w=screen.Width;       //屏幕宽度

 

window对象属性:

 

window.status  代表浏览器状态栏

      设置状态栏标题

      window.status="清华IT"; 

window.closed   窗口是否关闭

 

 

window的事件

<html>

   <head>

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

     <title>window 对象的专有事件演示</title>

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

        alert("开始加载网页....\n ---请注意网页的加载顺序---");

     </script>

   </head>

   <!--  window的专有事件:

       onload            在浏览器完成对象的装载后触发事件

      onunload          在对象卸载前立即触发事件

      onbeforeunload    在页面将要被卸载前触发事件

      

      window对象的事件处理通过body标签的事件属性来设置的

   -->

   <body οnlοad="alert('html文档加载完毕')"

         οnbefοreunlοad="window.event.returnValue='******你确定关闭本窗口******'"

        οnunlοad="alert('拜拜')">

    <h2>注意网页的加载顺序哦!!!</h2>

   </body>

</html>

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

        alert("加载写在最下面的JavaScript脚本");

</script>

 

      

 

 

 

 

 document对象    代表给浏览器窗口中的 HTML 文档

 document的属性:

<script type="text/javascript" language="JavaScript">

   function change(){

              document.bgColor="green";

              document.fgColor="red";           //文本前景色

              document.vlinkColor="0x00ff00";  //已访问过的链接文本颜色

              document.linkColor="gray";       //链接文本颜色

           }

          

           function showURL(){

              alert(document.URL);       //当前文档Unicode编码的 URL地址

           }

   </script>

   <body οnlοad="change();">

      <h2>普通文本</h2>

      <a href="#" οnclick="showURL();" >链接</a>

   </body>

 

 

 

 

     document的方法

           document.write()

document.writeln()

      document.close()

       <body>

        <h2>开始的内容</h2>

        <script type="text/javascript">

            document.write("这是document对象写入的内容<br>");

            var str = "world";

            document.write("哈楼 ", str, " javascript ", "<br>");

            document.writeln(mystr = "Hello ", " World", "<br>");

            document.writeln(mystr)

            var a = "帅哥";

            document.write(newStr = (a == "美女") ? "东方不败" : "西门吹雪");

         document.write("<br>");

       

       

        function changeDoc(){

            document.writeln("以下是更新后的文档内容<br>");

            document.writeln('<script language="javascript">');

            document.writeln('function changeDoc()');

            document.writeln('{');

            document.writeln('document.writeln("hello ");');

            document.writeln('document.writeln("world ");');

            document.writeln('}');

            document.writeln('</scr'+'ipt>');//注意这里写法

            document.writeln('<input type="button" value="测试document对象" οnclick="changeDoc();">');

            document.close();  //关闭文档 输出

        }

        </script>

      <input type="button" value="测试document对象" οnclick="changeDoc();">

    </body>

 

 

     document集合属性:

            document.forms         //返回文档中的表单数组

           document.anchors       //获取所有带有 name 和/或 id 属性的 a 对象的集合数组

           document.images        //返回文档中的image的数组

           document.links           //获取文档中所有指定了 HREF 属性的 a 对象和所有 area 对象的集合数组

         document.all            返回对象所包含的元素集合的引用

     <script type="text/javascript">

            window.status = "清华IT"; //设置状态栏文本

            document.title = "演示";

            function show(){

                alert("文档标题:" + document.title);

                alert("所有指定了href属性的 对象集合数组长度:" + document.links.length);

                alert("所有带有 name或 id 属性的 a对象的集合数组长度:" + document.anchors.length);

                alert(document.links[1].href);

                alert(document.all["an1"].name)

                alert(document.forms["frm1"].method);

            }

        </script>

    </head>

    <body>

        <button name="btn" onClick="show();">

            document集合属性演示

        </button>

        <br/>

        <a name="an1" id="a"> TO js_right.html</a>

        <br/>

        <a name="an2" id="b" href="js_left.html">链接到js_left.html</a>

        <br/>

        <a href="js_right.html">链接到js_right.html</a>

        <br/>

        <form name="frm1" method="get">

        </form>

        <form name="frm2" method="post">

        </form>

        <form name="frm3" method="post">

        </form>

    </body>

     

 

frames  框架对象 不能同时设定body

      parent.frames 返回父窗口的框架数组:

           alert(top.frames.length);

           alert(parent.frames[0].name)

           alert(parent.frames["myleft"].name)

 

 

body对象及通用属性

body对象方法:

      <script type="text/javascript" language="JavaScript">

        function createA(){

           var myA=document.createElement("a"); //创建一个html元素

           myA.href="js_跑马灯.html";

           myA.innerText="链接到js_跑马灯.html";

           document.body.appendChild(myA);     //body对象添加子节点

        }

      </script>

    </head>

    <body οnlοad="createA();">

       <h2>这是一个javascript动态创建的超链接</h2>

</body>

 

通用属性:

<html>

   <head>

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

      <title>body对象属性演示</title>

      <style>

        body{ font-size:20px;}

      </style>

   </head>

   <body>

      <!—通用属性:

          innerText    起始和结束标签内的文本

        innerHTML    起始和结束标签内的 HTML

        outerText    起始和结束标签内的文本(包含标签本身)

        outerHTML    起始和结束标签内的 HTML(包含标签本身)

      -->

      <p id="p1" οnmοuseοver="this.innerText='<I>innerText</I>'"

                    οnmοuseοut="this.innerHTML='<I>innerHTML</I>'">

        innerText与innerHTML的区别

      </p>

     

      <div  οnmοuseοver="p2.outerHTML='<p id=p2><I>outerHTML</I></p>'"

             οnmοuseοut="p2.outerText= '<p id=p2><I>outerText</I></p>'" >

        测试outerText与outerHTML区别 <br>

         注意当鼠标再次移动到div上时报错 原因: p2不存在 原来的p2已经被替换成文本

      </div>

      <p id="p2">

        outerText与outerHTML区别

      </p>

      <p id=p3><I>哈楼!!!</I></p>

      <input type="button" value="innerText" οnclick="alert(p3.innerText)">

      <input type="button" value="innerHTML" οnclick="alert(p3.innerHTML)">

      <input type="button" value="outerText" οnclick="alert(p3.outerText)">

      <input type="button" value="outerHTML" οnclick="alert(p3.outerHTML)">

   </body>

</html>

 

 

<body>

        <div id="float_icon" style="position:absolute;left=0;top=0;">

            <a href="#"><img src="cat.gif" border=1></a>

        </div>

    </body>

<script>

   /*

     offsetTop     表示对象距顶部高度

     offsetLeft    表示对象距左边宽度

      offsetWidth   表示对象宽度  

     offsetHeight  表示对象高度

     clientWidth   表示对象不包含滚动条或边框、边距的宽度

     clientHeight  表示对象不包含滚动条或边框、边距的高度

     clientTop     表示对象不包含滚动条或边框、边距的距父容器顶部高度

     clientWidth   表示对象不包含滚动条或边框、边距的距父容器左边宽度

   */

    var dirX = 1, dirY = 1;

    var xPos = 0, yPos = 0;

    window.setInterval(moveIcon, 10);

    function moveIcon(){

  

        xPos += 2 * dirX;

        yPos += 2 * dirY;

        float_icon.style.top = yPos;  //top div距顶部高度

        float_icon.style.left = xPos; //left div距左边宽度 

        if (xPos <= 0 || xPos + float_icon.offsetWidth >= document.body.clientWidth) {

           dirX = -dirX;

        }

        if (yPos <= 0 || yPos + float_icon.offsetHeight >= document.body.clientHeight) {

            dirY = -dirY;

        }

    }

</script>

 

 

 

Style对象:

      <script type="text/javascript" language="JavaScript">

        function showItem(){

           //获取id为sp的span标记下的img标记数组

           var imgs=document.getElementById("sp").getElementsByTagName("img");

           var cp=document.getElementById("cp");

           var canExpand=true;

           if(imgs[0].src.indexOf("minus.gif")!=-1){

              canExpand=false;

              imgs[0].src="images/plus.gif";

           }else{

              imgs[0].src="images/minus.gif";

           }

           if(canExpand){

              cp.style.display="block";  //显示

           }else{

              cp.style.display="none";   //隐藏

           }

        }

      </script>

   </head>

   <body>

      <span id="sp" style="cursor:hand;" οnclick="showItem()">

          <img src="images/minus.gif">

      </span>总公司

       <ul id="cp">

           <li>上海分公司

           <li>北京分公司

           <li>常德分公司

       </ul>

   </body>

 js树的例子见:js_静态树.html

 

 

 

 

 

 

 

w3c DOM

   

  关于节点的操作

       

   引用结点

     document.getElementById("idName"); 

     document.getElementsByTagName("tagName");  返回数组

     document.getElementsByName("元素名称");

 

   引用子结点

     elementName.childNodes    elementName节点下所有子节点数组

     elementName.firstChild

     elementName.lastChild 

 

   引用父结点

     elementName.parentNode        elementName节点的父节点

     elementName.parentElement    elementName节点的父元素(IE)

 

   获取结点信息

     node.nodeName        node节点的名称

     node.nodeType        node节点的节点类型 1 element 2 attribute 3 text

     node.nodeValue       node节点的文本内容

   属性结点

     elementNode.setAttribute(attributeName,attributeValue)  设置节点属性

     elementNode.getAttribute(arributeName)                     获取节点属性

例子:

<body>

     <div id="div1"><img src="images/splash.gif"/><font >这是文本</font></div>

     <input type="button" value="DOM演示" οnclick="changeText();">

     <hr>

  </body>

</html>

<script type="text/javascript">

    function changeText(){

        var node=document.getElementById("div1");

        alert("节点名称:"+node.childNodes[0].nodeName);

        alert("节点类型:"+node.childNodes[0].nodeType);

        alert("节点的文本内容:"+node.childNodes[1].childNodes[0].nodeValue);

        node.childNodes[1].childNodes[0].nodeValue="这是改变后的文本";

        node.childNodes[1].setAttribute("color","red");//设置节点属性

    }

</script>

 

节点的创建和删除

创建元素节点

     document.createElement("div");

     创建文本节点

     document.creatTextNode("hello");

     添加子节点

     父节点.appendChild("span");  插入所有子节点之后返回新节点引用

     插入子节点

      父节点.insertBefore(新节点,当前节点)  返回新节点引用

     删除子节点

        父节点.removeChild(childNode)

例子:

<html>

  <head>

    <script type="text/javascript">

       function createDOM(){

           var mydiv=document.getElementById("div3");

           var _img=document.createElement("img");

           _img.setAttribute("src","images/fish.gif");

           mydiv.appendChild(_img);

          

           var _span=document.createElement("span");

           var _hr=document.createElement("<hr>");

           var _text=document.createTextNode("hello world");

         

           _span.appendChild(_hr);

           _span.appendChild(_text);

           insertAt(mydiv,_span,1);

       }

   

       function insertAt(currentNode,newNode,index){

          //如果父结点无子结点则直接添加

          if(!currentNode.hasChildNodes()){

             currentNode.appendChild(newNode);

          }else{

             //否则在指定索引的子节点前添加一个节点

             currentNode.insertBefore(newNode,currentNode.childNodes[index]);

          }

       }

    </script>

  </head>

  <body>

   <div id="div3">

      <input type="button" value="DOM演示" οnclick="createDOM();">

   </div>

  </body>

</html>

 

DOM操作表格

表格的其他标签:<thead>表头  只一个      <tbody>表体   可以有多个

<table border="1"  width="500">

      <thead>

      <tr>

         <th>用户名</th><th>地址</th><th>电话</th>

      </tr>

      </thead>

     <tbody>

      <tr>

        <td>宇春妹妹</td><td>后街</td><td>111111</td>

       </tr>

       <tr>

        <td>芙蓉姐姐</td><td>后街</td><td>111111</td>

       </tr>

     </tbody>

      </table>

   引用单元格

     mytable.rows  //返回行的集合

     mytable.rows(i).cells(j)  //返回指定行和列的单元格

     mytable.rows(i).cells(j).childNodes[0].value //返回指定行和列的单元格文本

   创建表格

     var mytable=document.createElement("table")

   删除行

     mytable.deleteRow(i);

   添加行

     mytable.insertRow(i)

   添加单元格

     mytableRow.insertCell(i)

   删除单元格

     mytableRow.deleteCell(i)

   删除列

     mytable.rows[i].deleteCell(j);

   使用单元格

     var cb=document.createElement("input")

     cb.type="checkbox"

     mytable.rows[0].cells[1].appendChild(cb)

     mytable.rows[0].cells[0].innerHTML="hello"

例子:

<body> 

  <h3 align="center" >用户信息</h3>

    <table id="mytb"  align="center" border="1" width="500">

     <thead>

      <tr align="center">

      <td><input type='checkbox' id="selAll" οnclick='selectAll();'></td>

<td>姓名</td><td>单位</td><td>年龄</td></tr>

   </thead>

    </table>

    <hr>

       <div id="div2" align="center" >

          姓名: <input type="text" id="myname" size="10" >

          单位: <input type="text" id="myunit" size="10">

          年龄: <input type="text" id="myage" size="5">

     

      <input type=button value="添加" οnclick="addUser()">

      <input type=button value="删除" οnclick="delUser()">

      </div>

</body>

</html>

<script type="text/javascript"><!--

 

   function selectAll(){

      var selAll=document.getElementById("selAll");

      var check=selAll.checked;

      var selIds=document.getElementsByName("selIds");

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

           selIds[i].checked=check;

      }

   }

  

   function addUser(){

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

      var unit=document.getElementById("myunit").value;

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

      var user=["",name,unit,age];

      var mytb=document.getElementById("mytb");

      var len=mytb.rows.length;

      if(name!="" && unit!="" && age!=""){

          var _tr=mytb.insertRow(len);

          var _tb0=_tr.insertCell(0);

             _tb0.innerHTML="<input type='checkbox' name='selIds'>";

 

          for(var i=1;i<4;i++){

             var _tb=_tr.insertCell(i);

             _tb.innerHTML=user[i];

          }

      }

   }

  

   function delUser(){

      var mytb=document.getElementById("mytb");

      for(var i=(mytb.rows.length-1);i>0;i--){

           if(mytb.rows(i).cells(0).childNodes[0].checked){

              mytb.deleteRow(i);

           }

      }

   }

 </script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值