javascript 学习 —— BOM和DOM编程学习

这是我的第一个博客,用来记录自己的学习历程。之前的学习会在项目下写备注,再次翻看也有些不方便。从今天开始就用博客记录吧。

一、BOM ( browser object model ) 与DOM

              1.在学习DOM之前总听到BOM这个概念,什么是BOM呢? BOM全称 Browser Object Model,浏览器对象模型。  JavaScript是由浏览器中内置的javascript脚本解释器程序来执行javascript脚本语言的。

             2.BOM与DOM有什么关系呢? 我们知道javaScript 可以分为两部分  EMCAScript(基本语法)和 BOM( Browser Object Model) 浏览器对象模型.window 其实就是BOM的对象,docunment 是DOM

         

                   

    二、BOM

                1.BOM常用的属性            

 

部分使用方法如下:

  • window.open() - 打开新窗口
  • window.close() - 关闭当前窗口
  • window.moveTo() - 移动当前窗口
  • window.resizeTo() - 调整当前窗口的尺寸

      2.BOM常用函数

      

         部分使用如下(在js文件中 window可写可不写)         

          window.alert();

          clearInterval();

          window.config();

           setTimeout();

    3.window Location对象

          window.location 对象在编写时可不使用 window 这个前缀           

  • location.hostname 返回 web 主机的域名
  • location.pathname 返回当前页面的路径和文件名
  • location.port 返回 web 主机的端口 (80 或 443)
  • location.protocol 返回所使用的 web 协议(http:// 或 https://)
  • location.href 属性返回当前页面的 URL。

   

4.window History

  • hisatory.back() - 与在浏览器点击后退按钮相同
  • history.forward() - 与在浏览器中点击按钮向前相同
  • history.go() -与在浏览器点击后退按钮相同  /  与在浏览器中点击按钮向前相同,可加入正整数或负整数 表示前进或后退几步

     以上只是常用的对象或方法(可参考w3School)链接:https://pan.baidu.com/s/1V6qCfIcHMyYs-FE8xLY3Sw 提取码:a9y6

 

    三、DOM

        

<!DOCTYPE html>
<html lang="en">
<head>
    
    <title>Document</title>
</head>
<body>
    <a href=""></a>
    <h1>我是文本</h1>
</body>
</html>

 

      1.DOM 节点

             元素节点  element node   : 标签

             属性节点   attribute node : 如href name value

             文本节点  text node    :  <h1></h1> 中的 我是文本

 

     2.DOM上下级的关系

              父子关系(parent-child)

               兄弟关系(slibing)

     3.DOM的操作类容

           3.1查询元素

               1.定点查询

                   document.getElementById("");  返回一个访问对象

                  getElementsByTagName("");返回一组 通过tagname 查询的对象

                  getElementsByName(""); 返回一组 通过name 查询的对象

               2.间接查询

                   父节点: parentNode

                    孩纸节点 : childNodes  fristChild(第一个孩子节点)   lastChild(最后一个孩子节点)

                   兄弟节点:previousSlibling     nextSlibling

                

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>查找element</title>
</head>
<body>
    <form action="#" method="get">
        用户名:<input type="text" placeholder="请输入用户名" id = "username"><br>
        密&emsp;码:<input type="password" placeholder="默认为123456" id = "password"><br>
        性&emsp;别:<label><input type="radio" name="sex" >男
                    <input type="radio" name="sex">女
                    <!--默认选中  保密-->
                    <input type="radio" name="sex" checked="checked">保密
                    </label><br>
        爱&emsp;好:<label><input type="checkbox" name="hobby" id = "1">运功
                    <input type="checkbox" name="hobby" id = "2">旅游
                    <input type="checkbox" name="hobby" id="3">阅读
                    <input type="checkbox" name="hobby" id="4">摄影
                    </label><br>
        地&emsp;址:<label><select name="city" id="city" >
                        <!--默认选中广州-->
                        <!--<option value="gz" selected="selected">广州</option>-->
                        <option>请选择</option>
                        <option value="bj">北京</option>
                        <option value="sh">上海</option>
                        <option value="sz">深圳</option>
                    </select></label><br>
        上传头像:<input type="file"><br>
        个人简介:<br>
        <label><textarea cols="20" rows="5">不少于10字</textarea></label><br>
        <input type="submit" value="提交"> <input type="reset" value="重置">
    </form>
</body>
</html>

<script src="../js/element.js"></script>

               

//查询指定ID元素对象
    var user = document.getElementById("username"); //单个
        console.log(user.nodeType);
        console.log(user);
        
    var hobby = document.getElementsByName("hobby");//指定name 获得多个元素对象


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

        console.log(i+":"+ hobby.item(i));
    }

    var hobby = document.getElementsByTagName("input");//指定元素 获取多个元素对象

        console.log(hobby.length);


        var opt = document.getElementById("city");   
        var city = opt.childNodes;          //获取孩子节点  但是 空白和注释都算作 孩子节点
        console.log(city.length);
        for(var i =0;i<city.length;i++){

            console.log(city.item(i));
        }


        var child = document.getElementById("2");

        console.log(child.previousElementSibling.nodeType);   //获取兄弟(只含元素)节点 的 type


        console.log(child.parentNode.nodeName);      //获取父亲 节点的  name

        /*
            document.getElementById("");  

            getElementsByTagName("");

            getElementsByName("");
            
            childNodes

            parentNode

            previousElementSibling




        */





    

           3.2操作属性

               方法一:以键值对的方法 setAttribute(属性名,属性值), getAttribute()

               方法二:  以半角句号 的 形式修改属性 ‘ . ’ 对象.属性

         

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM操作-操作属性</title>

    <script>

        function func1(){
            //得到的图片
            var img = document.getElementById("img");
            //修改图片的src属性

            img.src = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1104642158,1544670491&fm=26&gp=0.jpg";
            //修改图片的title

            img.title = "绝地求生";
            

        }
        function func2(){
            
            //获取超链接
            var a1 = document.getElementById("a1");
            //修改超链接的文本(不是属性)
            a1.innerText = "京东";
            //修改超链接的herf
            a1.href = "http://www.jd.com";
            //修改超连接的target 属性
            a1.target = "_self";
        }
    </script>
</head>
<body>
    <img id="img" src="http://img3.imgtn.bdimg.com/it/u=3721871264,4279506929&fm=26&gp=0.jpg" alt="" title="lol"><br>

    <a id = "a1" href="http://www.taobao.com" target="_blank">淘宝</a><br>

    <input type="button" value="func1" onclick="func1()"><br>

    <input type="button" value="func2" onclick="func2()"><br>
</body>
</html>
<!--
    修改属性 :
    获取对象
        1. 以键值对的方法 setAttribute(), getAttribute()
        2. 以半角句号 的 形式修改属性 ‘ . ’ 对象.属性
-->

             

            3.3操作文本

                对于<p> <hn> <div> <span> 的标签的内部文本可以使用innerHtml innerText

                1.innerHtml:从对象的起点到对象的终点 包括标签

                2.innerText:从对象的起点到对象的终点 仅限文本

                 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM操作-操作文本</title>
    <script>

        function func1(){
        
            //取出div1的文本 innerHtml
            var div1 = document.getElementById("div1").innerHTML;
            console.log(div1)
             //取出div1的文本 innerText
            var div2 = document.getElementById("div2").innerText;
            console.log(div2)


        }
    </script>
</head>
<body>
    <div id="div1" style="border: 1px solid red;background-color:green;">
        <h3>测试操作文本</h3>
    </div>

    <div id="div2" style="border: 1px solid red;background-color: blue;">
        <h3>测试操作文本</h3>
    </div>
    <input type="button" value="func1" onclick="func1()">
</body>
</html>

             3.4操作元素             

             创建节点的方法

                      document.createElement()    

              加入节点的方法

                      appendChid(chidElement) :末尾追加方式插入节点

                      parentNode.insertBefore(newNode,beforeNode):在指定节点前插入新节点

              删除节点的方法

              parentNode.removeChild(childNodes)

              替换节点的方法

              parentNode.replaceChild(newNode,oldNode)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    
    <title>Document</title> 
    
    <script>


        function removeFileItem(){ 
            //获取删除的对象
                
                var fa = this.parentNode.parentNode;
                console.log(fa);                
                fa.parentNode.removeChild(fa);                                                  
        }
    
        function addFileItem(){

            // <tr>
            //     <td></td>
            //     <td>
            //         <input type="file" name = "photo" id = "photo"/>
            //         <input type="button" value="删除" onclick="removeFileItem()">
            //     </td>
            // </tr>
            /*
            需要添加如上表格

            */
            //1.创建 input 并设置属性
            
            var input1 = document.createElement("input");
            input1.type = "file";
            input1.name = "photo";
            input1.id = "photo";
            console.log(input1);

            var input2 = document.createElement("input");
            input2.type = "button";
            input2.value="删除";
            input2.onclick= removeFileItem;
            console.log(input2);

            //2.创建 <td> 并把<input> 加入进来

                var td1 = document.createElement("td");

                td1.appendChild(input1);
                td1.appendChild(input2);

                console.log(td1);
            //3.创建同级 <td>
                var td2 = document.createElement("td");
                td2.innerHTML = "";

            //4.创建<tr> 并加入 <td>

                var tr = document.createElement("tr");

                tr.appendChild(td2);
                tr.appendChild(td1);
                console.log(tr);
            //5.把 <tr> 加入table

                //5.1 获取最后一个<tr>对象
                    var lastTr = document.getElementById("lastrow");

                //5.2 加入table

                    lastTr.parentNode.insertBefore(tr,lastTr);

                    console.log(lastTr);
        }
        
                            
    </script>
</head>
<body>
    <h3>注册用户</h3>
    <form action="" >
        <table id="table"border = "1" width = "40%">
            <tr>
                <td>用户名</td>
                <td><input type="text" name = "username" id = "username" value="请输入名字 "></td>
            </tr>
        
            <tr>
                <td>照片</td>
                <td>
                    <input type="file" name = "photo" id = "photo"/>
                    <input type="button" value="添加" onclick="addFileItem()">
                </td>
            </tr>

            <tr id = "lastrow">

                <td colspan="2" align="center">
                    <input type="submit" value="提交">
                    <input type="reset" value="重置">
                </td>
            </tr>

        </table>
    </form>
</body>
</html>

<!--
            
        创建节点的方法
        document.createElement()
        
        加入节点的方法
        appendChid(chidElement) :末尾追加方式插入节点

        parentNode.insertBefore(newNode,beforeNode):在指定节点前插入新节点

        删除节点的方法
        
        parentNode.removeChild(childNodes)

        替换节点的方法


        parentNode.replaceChild(newNode,oldNode)

-->

           3.5操作CSS               

              方法一:使用style对象操作CSS

                        双单词和多单词使用驼峰写法

             方法二:使用  className

                        节点的属性对应于css的类选择器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM操作-css</title>
    <style type = "text/css">
        li{
            font-size: 12px;
            color: #ffffff;
            background-color: gray;
            border-radius: 5px;
            height: 33px;
            width: 104px;
            text-align: center;
            line-height: 38px;
            list-style: none;
            float: left;
        }

        .over{
            font-size: 16px;
            color:yellow;
            background-color: red;
    }

        .out{
            font-size: 12px;
            color: #ffffff;
            background-color: gray;
        }
    
    </style>
    <!-- <script type="text/javaScript">
            function changeA(obj) {
                //改变字体大小
                obj.style.fontSize = "16px";
                //改变文本颜色
                obj.style.color = "yellow";

                //改变背景颜色
                obj.style. backgroundColor = "red";
                
            }
            function  changeB(obj) {
                //改变字体大小
                obj.style.fontSize = "12px";
                //改变文本颜色
                obj.style.color = "#ffffff";

                //改变背景颜色
                obj.style. backgroundColor = "gray";
                
            }
    </script> -->

    <!-- <script>
        //页面加载完成后,给所有的li绑定Over和out标签
        window.onload = function(){
            //获取所有<li>标签的对象
            var  liArr = document.getElementsByTagName("li");
            //遍历对象<li>
                for(var i = 0;i<liArr.length;i++){
                    liArr.item(i).onmouseover = function(){
                         //改变字体大小
                        this.style.fontSize = "16px";
                        //改变文本颜色
                        this.style.color = "yellow";

                        //改变背景颜色
                        this.style. backgroundColor = "red";
                    }

                    liArr.item(i).onmouseout = function(){
                        //改变字体大小                       
                        this.style.fontSize = "12px";
                        //改变文本颜色
                        this.style.color = "#ffffff";

                        //改变背景颜色
                        this.style. backgroundColor = "gray";
                    }
                }
        }
    </script> -->

    <script>
        //页面加载完成后,给所有的li标签绑定Over和out
        window.onload = function(){
            //获取所有<li>标签的对象
            var  liArr = document.getElementsByTagName("li");
            //遍历对象<li>
                for(var i = 0;i<liArr.length;i++){
                    liArr.item(i).onmouseover = function(){
                        this.className = "over";
                        console.log(this);
                        
                        console.log(this.className)

                    }

                    liArr.item(i).onmouseout = function(){
                        this.className = "out";
                    }
                }
        }
    </script>
</head>
<body>
    <!-- <ul>
        <li onmouseover="changeA(this)" onmouseout="changeB(this)">语文</li>
        <li onmouseover="changeA(this)" onmouseout="changeB(this)">数学</li>
        <li onmouseover="changeA(this)" onmouseout="changeB(this)">英语</li>
    </ul> -->

    <!-- <ul>
        <li>语文</li>
        <li>数学</li>
        <li>英语</li>
    </ul> -->
    <ul>
        <li>语文</li>
        <li>数学</li>
        <li>英语</li>
    </ul>
</body>
</html>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值