深入浅出javascript DOM编程

简介: 本章主要讲解javascript语言中的BOM和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>


目录
相关文章
|
11天前
|
JavaScript 前端开发 编译器
解锁JavaScript模块化编程新纪元:从CommonJS的基石到ES Modules的飞跃,探索代码组织的艺术与科学
【8月更文挑战第27天】随着Web应用复杂度的提升,JavaScript模块化编程变得至关重要,它能有效降低代码耦合度并提高项目可维护性及扩展性。从CommonJS到ES Modules,模块化标准经历了显著的发展。CommonJS最初专为服务器端设计,通过`require()`同步加载模块。而ES Modules作为官方标准,支持异步加载,更适合浏览器环境,并且能够进行静态分析以优化性能。这两种标准各有特色,但ES Modules凭借其更广泛的跨平台兼容性和现代语法逐渐成为主流。这一演进不仅标志着JavaScript模块化的成熟,也反映了整个JavaScript生态系统的不断完善。
29 3
|
6天前
|
JavaScript 前端开发
JavaScript 与 DOM 交互
【9月更文挑战第01天】
9 2
|
26天前
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型
12 1
js之DOM 文档对象模型
|
12天前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
32 1
|
17天前
|
JSON JavaScript 前端开发
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
JS的无限可能: 前端 精妙DOM技巧至Node.js的服务端
|
16天前
|
JavaScript 前端开发 安全
揭秘TypeScript的魔力:它是如何华丽变身为JavaScript的超能英雄,让您的代码飞入全新的编程维度!
【8月更文挑战第22天】在Web开发领域,JavaScript是最主流的编程语言之一。但随着应用规模的增长,其类型安全和模块化的不足逐渐显现。为解决这些问题,微软推出了TypeScript,这是JavaScript的一个超集,通过添加静态类型检查来提升开发效率。TypeScript兼容所有JavaScript代码,并引入类型注解功能。
24 2
|
27天前
|
XML JavaScript 前端开发
JavaScript中的DOM解析器DOMParser api的讲解
`DOMParser`能将XML或HTML源码字符串解析成DOM `Document`。通过`new DOMParser()`创建实例,使用`.parseFromString(string, type)`方法进行解析,其中`string`为待解析的字符串,`type`指定解析类型如`text/html`或`text/xml`等,返回一个`Document`对象。例如,可解析包含`&lt;p&gt;666&lt;/p&gt;`的字符串并获取其文本内容`666`。
55 1
|
7天前
|
JavaScript 前端开发 Oracle
|
15天前
|
JavaScript 前端开发 开发者
震撼揭秘!JS模块化进化史:从混沌到秩序,一场代码世界的华丽蜕变,你怎能错过这场编程盛宴?
【8月更文挑战第23天】在 Web 前端开发领域,JavaScript 模块化已成为处理日益复杂的 Web 应用程序的关键技术。通过将代码分解成独立且可重用的模块,开发者能够更有效地组织和管理代码,避免命名冲突和依赖混乱。从最早的全局函数模式到 IIFE,再到 CommonJS 和 AMD,最终进化到了 ES6 的原生模块支持以及 UMD 的跨环境兼容性。本文通过具体示例介绍了这些模块化规范的发展历程及其在实际开发中的应用。
27 0
|
17天前
|
JavaScript 前端开发 数据库
编程小白到高手:掌握null与undefined、JavaScript中隐藏的技巧曝光!
编程小白到高手:掌握null与undefined、JavaScript中隐藏的技巧曝光!