JavaScript 基础之二


DHTML对象模型是将浏览器和HTML文件的标签都对象化,以便Javascript程序代码可以轻易地操控浏览器和访问HTML标签的对象.

DHTML并没有建立全新的HTML标签集和样式之间的关系,Script程序代码可以控制文件的元素,样式可以建立文件元素的编排,Script程序代码可以访问样式或初始化样式.

访问HTML文件的所有元素,将每一个HTML标签视为一个对象,使用属性id或name来访问标签对象。一下是DHTML模型。

下面介绍几个常用对象的常用方法或者属性。

【Window对象】

1. setTimeout(express,time)

启动定时器,当Time的时间到达时,运行express表达式,单位为千分之一毫秒

clearTimeout()

停止setTimeout方法启动的定时器,看下面例子:

经过1秒后,执行Count()函数,然后,停止。

[javascript] view plain copy
  1. <spanstyle="font-size:18px;"><scriptlanguage="javascript"type="text/javascript">
  2. //计时
  3. functionCount()
  4. {
  5. alert("执行alert");
  6. }
  7. //保存setTimeout()函数返回ID
  8. vartimeoutId;
  9. functionGameBegin()
  10. {
  11. //经过1秒后,调用Count()函数
  12. timeoutId=setTimeout("Count()",1000);
  13. }
  14. functionGameEnd()
  15. {
  16. //结束调用
  17. clearTimeout(timeoutId);
  18. }
  19. </script></span>

2.内置对话框

alert(message)

显示一个警告信息的窗口,参数就是显示的信息内容

confirm(message)

一个确认的对话框,参数为信息内容,传回true表示单击“确定”按钮,false为“取笑”按钮

Prompt(msg,value)

显示输入文字内容的对话框,参数msg为信息内容,value为默认值,传回用户输入的字符串串

[javascript] view plain copy
  1. <spanstyle="font-size:18px;"><scriptlanguage="javascript"type="text/javascript">
  2. alert("李龙生");
  3. confirm("你确定登陆吗?");
  4. prompt("请输入用户名!","李龙生");
  5. </script></span>


【Navigator对象】

Navigtor对象是Window对象的下一层对象,通过该对象的属性可以获取浏览器和系统资源的信息,这些属性都是只读属性。

【Document对象】

即是浏览器显示的HTML文件,对文件的理解。

1.文件是一种应用程序

当HTML支持JavaScript后,文件从静态变为了动态应用程序

2.文件是一种用户接口

文件可以响应用户操作,它也是一种用户接口

3.文件是一种数据来源

XML能够定义 ,给予文件全新的意义,使文件不再只是文件,XML可以使文件成为一种数据来源

4.getElementById()

getElementByName()

可以依据HTML标签的id或者name属性获取指定的HTML元素,看下面实例:

[html] view plain copy
  1. <spanstyle="font-size:18px;"><head>
  2. <metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
  3. <title>获取文件指定元素</title>
  4. <scriptlanguage="javascript"type="text/javascript">
  5. //使用ID获取元素
  6. functiongetElement()
  7. {
  8. varelement=document.getElementById("header");
  9. alert("标签名称:"+element.tagName);
  10. }
  11. //使用Name获取元素
  12. functiongetElementName()
  13. {
  14. varelement=document.getElementsByName("buttonlist");
  15. alert("共有元素"+element.length);
  16. }
  17. </script>
  18. </head>
  19. <body>
  20. <h2id="header">获取文件指定元素</h2>
  21. <hr/>
  22. <form>
  23. <inputtype="button"value="获取标题标签"onclick="javascript:getElement();"/>
  24. <inputname="buttonlist"type="button"value="按钮1"onclick="javascript:getElementName();"/>
  25. <inputname="buttonlist"type="button"value="按钮2"onclick="javascript:getElementName();"/>
  26. </form>
  27. </body>
  28. </html></span>

运行效果如下:


【DHTML与DOM区别 】

DHTML 是 Dynamic HTML(动态 HTML)的缩写,是 HTML、CSS、Javascript 这三种技术的结合。

DOM 是 Document Object Model(文档对象模型)的缩写,是一种应用编程接口。

  • DHTML 出现得较早。
  • DOM 是在 DHTML 之后出现的。
  • DHTML 没有统一的标准,各浏览器有各自的 DHTML。
  • DOM 已经得到 W3C 的承认,并有新的标准,DOM 版本越往后,各浏览器对 DOM 的支持越相近。也即 DOM 比 DHTML 更规范。
  • DHTML 只适用于 Web 文档。
  • DOM 则涵盖了使用任何一种支持 DOM API 的程序设计语言去处理任何一种标记文档的所有情况,比如:ASP 处理 XML 文档,JavaScript 处理 Web 文档。也即 DOM 比 DHTML 功能强大。


======================================================================



一直用document.write()方法向浏览器中显示数据用,把它当做Alert()使用, 看来这样用有些大材小用了,下面说说它的主要用处。

document.write()方法可以用在两个方面:

1.页面载入过程中,用脚本加入新的页面内容。

2.用延时脚本创建本窗口或新窗口的内容。

该方法需要一个字符串参数,它是写到窗口或框架中的HTML内容。这些字符串参数可以是变量或值为字符串的表达式,写入的内容常常包括HTML标记语言。如下面代码,教务系统框架载入子页

[html] view plain copy
  1. <spanstyle="font-size:18px;"><!--将框架放入单元格中-->
  2. <tdclass="index-table-middle-center"valign="top"id="content-container">
  3. <divid="loading">
  4. //加载效果图标
  5. <imgsrc="images/loading.gif"alt="loading"border="0"/>
  6. </div>
  7. <scripttype="text/javascript">
  8. //调用JS的OutputIFrame函数,形成框架
  9. Index.OutputIframe();
  10. </script>
  11. </td></span>


JS代码

[javascript] view plain copy
  1. <spanstyle="font-size:18px;">//输出框架
  2. Index.OutputIframe=function(){
  3. varscrolling=$.isIE6==true?'yes':'auto';
  4. document.write('<iframeid="content"width="100%"height="100%"class="hide"marginwidth="0"marginheight="0"frameborder="0"scrolling="'+scrolling+'"οnlοad="$(\'#loading\').hide();$(this).show();"src=""></iframe>');
  5. };</span>


  在载入页面后,浏览器输出流自动关闭。在此之后,任何一个对当前页面进行操作的document.write()方法将打开—个新的输出流,它将清除当前页面内容(包括源文档的任何变量或值)。因此,假如希望用脚本生成的HTML替换当前页面,就必须把HTML内容连接起来赋给一个变量,使用一个document.write()方法完成写操作。


  关于document.write()方法还有一点要说明的是它的相关方法document.close()。脚本向窗口(不管是本窗口或其他窗口)写完内容后,必须关闭输出流。在延时脚本的最后一个document.write()方法后面,必须确保含有document.close()方法,不这样做就不能显示图像和表单。并且,任何后面调用的document.write()方法只会把内容追加到页面后,而不会清除现有内容来写入新值。

为了演示document.write()方法,我们提供了同一个应用程序的两个版本。一个向包含脚本的文档中写内容,另—个向—个单独的窗口写内容。

  示例1创建一个按钮,它为文档组合新的HTML内容,包括新文档标题的HTML标记和标记的颜色属性。

示例中有一个读者所不熟悉的操作符+=,它把其右侧的字符串加到其左侧的变量中,这个变量用来存放字符串,这个操作符能很方便地把几个单独的语句组合成—个长字符串。使用组合在newContent变量中的内容document.write()语句可以把所有新内容写到文档中,完全清除示例1中的内容。

然后需要调用document.close()语句关闭输出流。当载入该文档并单击按钮时,可以注意到浏览器标题栏中的文档标题因此而改变。当回到原始文档并再次单击该按钮时,可以看到动态写入的第二个页面的载入速度甚至比重载原始文档还要快。

示例1 在当前窗口使用document.write()。

[html] view plain copy
  1. <htmlxmlns="http://www.w3.org/1999/xhtml"><title>WritingtoSameDoc</title>
  2. <scriptlanguage="JavaScript">
  3. //重新写入函数
  4. functionRepeatWrite(){
  5. //保存写入的内容
  6. varnewContent="<html><head><title>ANewDoc</title></head>"
  7. newContent+="<bodybgcolor='aqua'><h1>Thisdocumentisbrandnew.</h1>"
  8. newContent+="ClicktheBackbuttontoseeoriginaldocument."
  9. newContent+="</body></html>"
  10. //写入新的内容
  11. document.write(newContent);
  12. document.close();
  13. }
  14. </script>
  15. </head>
  16. <body>
  17. <form>
  18. <!--单击按钮调用写入函数-->
  19. <inputtype="button"value="ReplaceContent"onClick="RepeatWrite()">
  20. </form>
  21. </body>
  22. </html>


示例2中,情况有点复杂,因为脚本创建了一个子窗口,整个脚本生成的文档都将写入该窗口中。为了使新窗口的引用在两个函数中保持激活状态,我们将newWindow变量声明为全局变量。

页面载入时,onLoad事件处理调用makeNewWindow()函数,该函数生成一个空的子窗口。另外,我们在window.open()方法的第三个参数中加入一个属性,使子窗口的状态栏可见。

页面上的按钮调用subWrite()方法,它执行的第一个任务是检查子窗口的closed属性。假如关闭了引用窗口,该属性(只在较新的浏览器版本中存在)返回true。如果是这种情况(假如用户手动关闭窗口),该函数再次调用makeNewWindow()函数来重新打开那个窗口。

窗口打开后,新的内容作为字符串变量组合在一起。与示例1一样,一次性写入内容(虽然对单独的窗口没有必要),接下来调用close()方法。但是注意一个重要的区别:write() 和 close()方法都明显地指定了子窗口。

[html] view plain copy
  1. <htmlxmlns="http://www.w3.org/1999/xhtml"><title>WritingtoSubwindow</title>
  2. <scriptlanguage="JavaScript">
  3. //生命一个全局变量
  4. varnewWindow;
  5. //打开一个新的窗口
  6. functionmakeNewWindow(){
  7. newWindow=window.open("","","status,height=200,width=300")
  8. }
  9. //判断新窗口是否关闭,如果关闭重新打开
  10. functionsubWrite(){
  11. //makenewwindowifsomeonehasclosedit
  12. if(newWindow.closed){
  13. makeNewWindow()
  14. }
  15. //是新窗口获得焦点
  16. newWindow.focus()
  17. //保存写入内容
  18. varnewContent="<html><head><title>ANewDoc</title></head>"
  19. newContent+="<bodybgcolor='coral'><h1>Thisdocumentisbrandnew.</h1>"
  20. newContent+="</body></html>"
  21. //将HTML代码写入新窗口中
  22. newWindow.document.write(newContent)
  23. newWindow.document.close()//closelayoutstream
  24. }
  25. </script>
  26. </head>
  27. <bodyonLoad="makeNewWindow()">
  28. <form>
  29. <inputtype="button"value="WritetoSubwindow"onClick="subWrite()">
  30. </form>
  31. </body>
  32. </html>


================================================================================


DOM是一种结构化对象模型提供了标签对象通用的访问方式,将HTML文件视为一个节点树,每一个标签和文字都是一个节点,可以访问每个节点和节点内容。

这样我们就可以通过DOM提供给的方法、接口来访问HTML内容,而不需要单个元素一个一个的查询。

优点:

跨平台和程序语言的程序接口

DOM提供应用程序环境的一种标准程序处理接口,这是一种HTML和XML文件的标准API,可以再网络上交换数据。

支持多种文件格式

支持多种程序语言

DOM提供了几个属性可以容易的访问树结构中的节点。如下

以parentNode、childNodes、previousSibling为例进行说明,看下面代码

[html] view plain copy
  1. <spanstyle="font-size:18px;"><htmlxmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>
  4. <title>无标题文档</title>
  5. <scriptlanguage="javascript">
  6. //显示当前节点的父节点
  7. functionshowParentNode()
  8. {
  9. //获得当前节点对象
  10. varmyObj=document.getElementById("lilongsheng");
  11. //查找父节点
  12. varparent=myObj.parentNode;
  13. //显示父节点名
  14. alert(parent.nodeName);
  15. }
  16. //显示孩子节点列表,返回类型为NodeList
  17. functionshowchild()
  18. {
  19. //获得当前节点对象
  20. varmyObj=document.getElementById("lilongsheng");
  21. //查找节点的子节点列表
  22. varchild=myObj.childNodes;
  23. //循环显示子节点列表
  24. for(vari=0;i<child.length;i++)
  25. {
  26. alert(child[i].nodeName);
  27. }
  28. }
  29. //显示下一个兄弟节点
  30. functionshowSibling()
  31. {
  32. //获得当前节点对象
  33. varmyObj=document.getElementById("lilongsheng");
  34. //查找下一个兄弟节点
  35. varsibling=myObj.nextSibling;
  36. //显示
  37. alert(sibling.nodeName);
  38. }
  39. </script>
  40. </head>
  41. <body>
  42. <form>
  43. <ulid="lilong">
  44. <liid="lilongsheng">
  45. <ahref="#">标题1</a>
  46. <ahref="#">标题2</a>
  47. <ahref="#">标题3</a>
  48. <ahref="#">标题4</a>
  49. </li>
  50. <hr/>
  51. </ul>
  52. <inputtype="button"onclick="showParentNode()"value="获取父标签名"/>
  53. <inputtype="button"onclick="showchild()"value="获取子标签名"/>
  54. <inputtype="button"onclick="showSibling()"value="获取兄弟标签名"/>
  55. </form>
  56. </body>
  57. </html></span>

分别单击三个单选按钮,可以获得结果如下:


分别获得当前标签的父标签、子标签、兄弟标签,其余方法不再累述,可以使用这些简单的方法实现对DOM文档模型里的元素进行增、删、改、查,操作DOM文档。




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值