为什么使用JavaScript操作Dom

1、Javascript最终是要操作html页面,让html变成dhtml,而操作html页面就要用到dom。Dom就是把html页面模拟成一个对象,就像XDocument一样,把xml模拟成了一个对象,提供了操作各个节点的方法,直接调用就可以了。

2、如果javascript只是执行一些计算、循环等操作,而不能操作html也就失去了它存在的意义。

Dom小知识:

1、DOM就是HTML页面的模型,将每个标签都做为一个dom对象,JavaScript通过调用DOM中的属性、方法就可以对网页中的文本框、层等元素进行编程控制。比如通过操作文本框的DOM对象,就可以读取文本框中的值、设置文本框中的值。 JavaScript→Dom就是C#→.Net Framwork。没有.net,C#只能for、while,连WriteLine、MessageBox都不行。Dom就是一些让JavaScript能操作HTML页面控件的类、函数。

2、DOM也像WinForm一样,通过事件、属性、方法进行编程。

3、CSS+JavaScript+DOM=DHTML

如果你还不清楚什么是Dom以及它之于JS的价值请看下图:

一段普通的HTML页面代码:

 



<html>
   <head>
   <title>HTML DOM</title>
   </head>
   <body>
   <h1>DOM的结构</h1>
   <p><a href="href">链接</a></p>
   </body>
</html>



 

而浏览器在解释该页面的时候  会将它模拟成为Dom树  结构如下:

JavaScript与Dom_sed

DOM编程

事件

<body οnlοad="" οnmοusedοwn=“alert(‘哈哈’)”>当点击鼠标的时候执行onmousedown中的代码。有的事件响应的代码太多,就放到单独的函数中:
    <script type="text/javascript">
        function bodymousedown() {
            alert("点我啊");
            alert("点坏了 你赔吧");
        }
    </script>
<body οnmοusedοwn="bodymousedown()">

bodymousedown后的括号不能丢(不能写成: οnmοusedοwn="bodymousedown" ),因为表示onmousedown事件发生时调用bodymousedown函数,而不是onmousedown事件的响应函数是bodymousedown。

Windows . Onload()是指整个页面文件加载完成之后才会去触发 网站优化时可以将调用外部的js文件代码放在body最后 在windows.onload中指定调用操作 这样页面显示速度会快些

括号不能丢 那什么时候可以不要括号比如:windows.οnlοad=funcation(){document.getElementById(“btn”).οnclick=showName;}这个时候就可以不要括号 因为这里要把方法的对象赋给onclik而不是去赋值这个事件 或者说是将事件的指针赋给onclik

OnLoad



<html>
< head>
    <title ></ title>
    <script src="javascript/JScript1.js" type="text/javascript"></ script >
    <script type="text/javascript">
        window.onload = function () {
            alert( "整个窗体加载完毕" );
            //运行时至JScript1.js外部文件连接时 此时浏览器请求外部js文件 会暂停当前浏览器的运行  为什么?
            //因为有可能页面中使用到外部js文件定义的方法
            //那么针对这一点可以将加载js外部文件的外部标签放在页面body的最后 这样用户可以很快的看到网页内容 
            //之后将调用外部js的事件写入window.onload中 避免找不到js事件
        }
    </script >
</ head>
< body > <!--οnlοad="alert(123)"当body所有资源内容加载完毕才会调用-->
</ body>
</ html>



方法调用



< head>
    <title ></ title>
    <script type="text/javascript">
        window.onload = function () {
            //document.getElementById("btn").onclick = show();
            //此时调用了=右边的show()方法 并将方法的返回值赋给了onclik属性 效果 页面加载直接弹出234
            document.getElementById( "btn" ).onclick = show; //此时是将show方法的指针赋给了onclik属性
        }
        function show() {
           alert( "234" );
        }
    </script >
</ head>
< body >
< input type ="text" id ="username" />
    <input type="button" id="btn" value="anniu" onclick="show()"/>
    <!--按钮的事件属性中指定方法的时候括号是不能省的  js中动态给按钮添加onclick的时候就不要加括号了-->
</ body>
</ html>



Window对象

window对象代表当前浏览器窗口。使用window对象的属性、方法的时候可以省略window,比如:

window.alert('a');可以省略成alert('a');

window对象常用的几个方法:

window.alert();

window.confirm();//确定、取消对话框,返回true或false;

window.close();//关闭浏览器窗口

window.prompt(text,defaultText) ;//弹出一个输入框,返回用户输入的值

window.navigate(url);//将网页重新导航到url,只支持IE,建议使用window.location.href=‘url’;//支持大多数浏览器

全局变量与局部变量

值类型:



< head>
    <title ></ title>
    <script type="text/javascript">
        //值类型的全局变量与局部变量
        window.onload = function () {
            show();
            alert(globle); //3.gege  globle = "gege";前没有加var  
            alert(globle); //5.haha  var globle = "gege" 加了var那么这里返回haha
        }
        var globle = "haha" ; //1.它是全局的 属于window的对象
        function show() {
            //globle = "gege"; //2.这里访问的就是window.globle 对全局变量的修改
            var globle = "gege" //4.这里是重新定义的局部变量globle 对局部变量的修改 不影响全局变量值
            alert(globle == window.globle); //6.返回false
            alert(globle); //gege
        }
    </script >
</ head>



引用类型:



< head>
    <title ></ title>
    <script type="text/javascript">
        //值类型的全局变量与局部变量
        window.onload = function () {
            show();
            alert(globle); //3.gege  globle = "gege";前没有加var  
            alert(globle); //5.haha  var globle = "gege" 加了var那么这里返回haha
        }
        var globle = "haha" ; //1.它是全局的 属于window的对象
        function show() {
            //globle = "gege"; //2.这里访问的就是window.globle 对全局变量的修改
            var globle = "gege" //4.这里是重新定义的局部变量globle 对局部变量的修改 不影响全局变量值
            alert(globle == window.globle); //6.返回false
            alert(globle); //gege
        }
    </script >
</ head>



引用类型与值类型的区别



< head>
    <title ></ title>
    <script type="text/javascript">
    //引用类型的全局与局部
        window.onload = function () {
            //showObj();
            //showObj2(NewObject);
            showObj3(NewObject);
            alert(NewObject.name);
        }
        var NewObject = new Object();
        NewObject.name = "wanghao" ;
        NewObject.age = 12;
        function showObj() {
            //NewObject.name = "jianglan";//这里是对全局变量的修改 所以上述结果两次都显是jianglan
            var NewObject = new Object();
            NewObject.name = "jianglan" ;//这里只是对新定义的对象进行属性的赋值 所以先显示jianglan  后显示wanghao
            alert(NewObject.name);
        }
        function showObj2(NewObject) {//如果将对象以参数的形式传递过来的话
            NewObject.name = "jianglan" ;//就是将外部变量的引用传递过来了 修改的就是引用地址的内容 所以两次都显示jianglan
            alert(NewObject.name);
        }
        function showObj3(NewObject) {//方法中的形参可理解为 方法中声明的局部变量  只是将这个变量的内存地址指向了全局的NewObject
            //var NewObject;
            NewObject.name = "jianglan" ;//它是对原地址的修改即修改wanghao
            NewObject = new Object();//将原本指向全局内存地址的变量 重新指向新的内存地址
            NewObject.name = "jianglan2" ;//为新地址赋值 所以下面显示结果当然是jianglan2
            alert(NewObject.name); //但是onload中任然访问全局对象地址 所以是修改后的jianglan
        }
    </script >
</ head>



值类型与引用类型代码图解:

JavaScript与Dom_ViewUI_02