深入浅出javascript DOM编程

本章主要讲解javascript语言中的BOM和DOM的相关技术,以实战为主,不讲解太多的重复的理论知识。重要部分代码都贴出来,并有详细的中文注释,思路非常清晰。如果对DOM和BOM理解掌握还不是非常透彻的同学,请耐心的看完每行代码,并自己亲自动手实践,这样才能真正掌握,加深印象。

首先是对BOM(浏览器对象模型)方面的常用技巧的演示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>学习浏览器对象模型BOM</title>
    <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
    <script type="text/javascript">
        var o = new Object();
        o=123456;
//        alert(o.toString());
        //        alert(window);


        //1.使用最多的window对象     
        var demo = 799; //所有的对象,都是默认在Window下面的
        //alert(demo); //或者写成 alert(window.demo);
         
        function move() {
                window.moveTo(300,200);//  定位为 300,200
            //    window.moveBy(300, 400); //以现在的位置为参考,偏移300,200
        
       }
       function test() {
           // window.resizeBy(300, 400);
           window.resizeTo(300, 400); //将浏览器窗口变为300*400
       }
       $(function () {
           $("#showWindow").click(function () {
               var oneNewWindow = window.open("setTimeOut.htm", "_blank"); //打开一个新的页面
               oneNewWindow.resizeTo(400, 300);
               oneNewWindow.moveTo(300, 400);
           });
           
           //2.history对象
           //           window.history.go(index); //浏览器历史记录中跳转。正数往前跳,负数往后跳
           //           window.history.back(); //往后跳转
           //           window.history.forword();//往前跳转
           //           alert(window.history.length);//浏览器总的跳转历史记录条数


           //3.document对象(dom的相关操作后续会详细讲解)
           document.anchors; //获取文档中所有的标签
           //alert(document.URL); //获取文档URL
           document.links; //获取文档中所有的链接
           document.forms; //获取文档中所有的表单
           document.images; //获取文档中所有的图片
           //alert(document.links.length);//获取链接的总个数
           //alert(document.links[0].href);//获取第一个链接的href属性


           //4.location对象
           //           location.href; //URL
           //           location.host; //ip地址
           //           location.port; //端口号
           // location.reload(); //刷新页面
           //location.replace("setTimeOut.htm");//页面跳转至指定的URL
           //alert(location.port);

           //5.navigator对象(浏览器对象)
           //alert(navigator.appName); //浏览器名称
           //alert(navigator.appVersion); //浏览器版本信息

           //6.screen对象(屏幕)
           // alert(screen.height); //屏幕分辨率的 Y--高度
           // alert(screen.width); //屏幕分辨率的 X--宽度

           //7.frames对象(框架)-- 注意:框架与 HTML dom中的contentWindow经常一起使用
           //获取父窗体中ID为ifmOne的框架元素,并调用其move()函数
           // parent.frames["ifmOne"].move();

       });

    </script>
</head>
<body>
<a href="javascript:move()">测试移动浏览器窗口</a>
<a href="javascript:test()">测试改变浏览器窗口的大小</a>
<input type="button" id="showWindow"  value="弹出一个小窗口的广告"/>
版权从2005年至<script type="text/javascript">document.write(new Date().getFullYear().toString())</script>年

</body>
</html>

下面则是更加复杂的DOM操作:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>复习Dom操作</title>
    <style type="text/css">
    #newTest
    {
        color:Red;
        }
    </style>
    <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
    <script type="text/javascript">
//        //jQuery写法--页面加载完成
//        $(document).ready(function () {

//        });
//        //可以简写成
//        $(function () { 
//
        //        });
        //标准js中的写法 --页面加载完成
        window.onload = function () {

            var root = document.documentElement; //DOM根节点 --文档节点
            var farDIV = document.getElementById("farther"); //根据ID获得DOM的“元素节点”
            //元素节点的一些常用的属性
            //document.getElementsByTagName("")//根据元素(标签)名称获得DOM的“元素节点”(可能是单个或一组)
            //document.getElementsByName("")//根据name属性获得DOM的“元素节点”(可能是单个或一组)
            var idNode = farDIV.getAttributeNode("id"); //获得属性为id的“属性节点”
            //注意:不要把 getAttribute("id")和getAttributeNode("id")搞混了,前者获取的是属性的值,后者获取的属性节点
            var textNode = farDIV.firstChild; //farDIV的第一个子节点

            //DOM中常用的属性
            //属性(其实只在属性节点中定义才有效)
            //farDIV.attributes;//返回该节点的所有属性对象的数组
            //节点名称
            // alert(root.nodeName + ":" + farDIV.nodeName + ":" + idNode.nodeName + ":" + textNode.nodeName);
            //nodeType(不支持IE)有五种,分别代表:标签(元素)节点,属性节点,文本节点,根节点,注释节点
            //alert(root.nodeType + ":" + farDIV.nodeType + ":" + idNode.nodeType + ":" + textNode.nodeType);
            //节点值
            //alert(root.nodeValue + ":" + root.nodeValue + ":" + idNode.value + ":" + textNode.nodeValue);

            //根节点的一些常用属性 -- 创建新节点
            var newNode = document.createElement("div"); //创建一个div节点
            var text = document.createTextNode("这是我手动创建的"); //创建一个文本节点
            newNode.appendChild(text); //将文本节点插入div节点中
            var attrNode = document.createAttribute("id"); //创建属性节点,属性名为“id”
            newNode.setAttributeNode(attrNode);   //将newNode节点的属性节点设置为attrNode
            newNode.setAttribute("id", "newTest"); //设置newNode节点的id属性设置为newTest
            //var comment = document.createComment("我是注释");//创建注释节点

            //获取页面中的body标签所在节点
            var body = root.lastChild; //获取root的最后一个子节点
            body.appendChild(newNode); //将新建的节点插入body中
            //如果添加成功,则CSS会生效(字体变红,ID选择器有效)

            //获取元素的属性 alert(farDIV.id);   alert(farDIV.getAttribute("id"));
            alert(newNode.getAttribute("id")); //HTML中获取节点的属性 -- 在XHTML中的可以简写 :alert(newNode.id); //

            //动态的创建表格
            //1.可以使用与上面类似的方式,创建节点、拼接、插入...  但是这样操作似乎很麻烦
            //2.可以使用更加简单的操作方式


        };
    </script>
</head>
<body>
<div id="farther">我是父div</div>
</body>
</html>

关于LoadXML部分,不同的浏览器有些差异,下面做了改进:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>javascript对XML的操作</title>
    <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
    <script type="text/javascript">
        function test() {
            alert(loadXML(true, "TestDom.xml"));
            alert(loadXML(false,"<xml>123</xml>"));
        }
        //IE和Firefox类浏览器中装载同域XML文件或XML字符串的方法
        //@param flag   true表示装载XML文件  false表示装载XML的字符串
        //@param xmldoc  flag为true时表示XML文件的路径,flag为false时表示XML字符串文本

        function loadXML(flag, xmldoc) {
            //IE和Firefox类浏览器对XML文档的装载和处理存在差异

            if (window.ActiveXObject) {
                //IE浏览器
                var activexName = ["MSXML2.Document", "Miscrosoft.XmlDom"];
                var xmlObj;
                for (var i = 0; i < activexName.length; i++) {
                    try {
                        xmlObj = new ActiveXObject(activexName[i]);
                        break;
                    } catch (e) {

                    }

                    if (xmlObj) {
                        // 装载XML文档的对象创建成功
                        xmlObj.async = false; // 同步方式
                        if (flag) {
                            //装载XML文件
                            xmlObj.load(xmldoc);
                        } else {
                            //装载XML字符串
                            xmlObj.loadXML(xmldoc);
                        }
                        //return xmlObj; //返回根节点
                        return xmlObj.documentElement; //返回跟元素
                    } else {
                        alert("装载XML的对象创建失败");
                        return null;
                    }
                }
            } else if (document.implementation.createDocument) {
                //针对FireFox类浏览器
            var xmlObj;
            if (flag) {
                //装载XML文件
                xmlObj = document.implementation.createDocument("", "", null);
                if (xmlObj) {
                    //同步方式进行装载
                    xmlObj.async = false; // 同步方式
                    xmlObj.load(xmldoc);
                    return xmlObj.documentElement;
                } else {
                    alert("装载XML的对象创建失败");
                    return null;
                }
            } else {
                //装载XML字符串
                xmlObj = new DOMParser();
              var DocRoot = xmlObj.parseFromString(xmldoc, "text/xml");
              return DocRoot.documentElement;
            }
            } else {
                alert("该类浏览器可能不支持");
                return null;
            }
}
    </script>
</head>
<body>
<input type="button" id="testLoad" value="测试XML文档加载" onclick="test()" />
</body>
</html>


上一篇:前端之CSS开始


下一篇:分享100佳精美的作品集网站设计案例