zoukankan      html  css  js  c++  java
  • HTML 学习笔记 JavaScript (DOM)

    一 DOM 简介

    通过HTML DOM 可以访问JavaScript 文档的所有元素

    当网页被加载的时候,浏览器会创建页面的文档对象模型

    HTML DOM 模型被构造成对象的树

    HTML DOM 树

    通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

    JavaScript 能够改变页面中的所有 HTML 元素
    JavaScript 能够改变页面中的所有 HTML 属性
    JavaScript 能够改变页面中的所有 CSS 样式
    JavaScript 能够对页面中的所有事件做出反应


    查找 HTML 元素

    通常 通过JavaScript 你需要操作HTML元素 为了做到这件事情 你必须查找到该元素。通常有三种方法可以做到这件事:

    1.通过id找到HTML元素:

    使用方法getElementById() 参数就是你要查找的元素的id名称。

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <p id="pid">这是一段话</p>
            <script>
                var p = document.getElementById("pid");
                function changep() {
    //                p.innerHTML = "我是改变后的段落";
                    p.innerText = "哈哈哈哈哈"
                }
            </script>
            <button type="button" onclick="changep()">改变</button>
        </body>
    </html>

    这里要说一下innerHTML和innerText 的区别。在上面这个例子中是看不出来区别的 我们可以再看一个例子。

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <div id="divId">
                <p>这是段落</p>
            </div>
            
            <script>
                var p = document.getElementById("divId");
                function changep() {
                    alert(p.innerHTML);
                    alert(p.innerText);
                }
            </script>
            <button type="button" onclick="changep()">改变</button>
        </body>
    </html>

    运行后可以看到 第一次提示的是<p>这是段落</p> 第二次提示的是"这是段落",也就是说p.innerHTML = <p>这是段落</p>;p.innerText = 这是段落。可以看出innerHTML取出的是该标签的元素,而innerText取出的是该标签的文本内容。

    2:根据标签名找到HTML元素:使用方法getElementsByName();由于name在HTML文档中不是唯一的,所以取出来的是个数组。

    实例:

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <p id="p1">我是一个p</p>
            <p id="p2">我是第二个p</p>
            <input type="text" name="userName"/>
            <input type="button" value="确定" onclick="fun1()">
            
            <script>
                var p = document.getElementsByName("userName");
                function fun1() {
                    alert(p[0].value)
                }
            </script>
            <button type="button" onclick="changep()">改变</button>
        </body>
    </html>

    使用getElementsByTagName() 根据HTML标签名获取元素节点,返回的是一个NodeList对象,可以根据索引取出来其中的一个 可以遍历输出。关于节点这个概念可以先了解一下 后面会有相关的博客讲解。

    根据DOM HTML 文档中的每个成分都是一个节点。HTML为跟节点。

    DOM是这样规定的:

    整个文档是一个文档节点

    每个HTML元素 是一个元素节点

    包含在HTML元素中的文本是文本节点

    每一个HTML属性 是一个属性节点

    注释属于注释节点

    看一个例子吧:

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <div id="divId">
                <p>今天周六哎</p>
                <p>你竟然在加班 鄙视你</p>
            </div>
            
            <button id="buttonId">测试</button>
            <script>
                //获取所有的p节点
                var pList = document.getElementsByTagName("p");
                function alertToUser() {
                    alert(pList[0].innerText);
                    alert(pList[1].innerText);
                }
                document.getElementById("buttonId").addEventListener("click", alertToUser);    
            </script>
            
        </body>
    </html>

    使用getElementsByClassName() 根据class获取元素节点

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <div class="divId">
                <p>今天周六哎</p>
                <p>你竟然在加班 鄙视你</p>
            </div>
            
            <button id="buttonId">测试</button>
            <script>
                //获取所有的p节点
                var pList = document.getElementsByClassName("divId");
                function alertToUser() {
                    alert(pList[0].innerHTML);
                }
                document.getElementById("buttonId").addEventListener("click", alertToUser);    
            </script>
            
        </body>
    </html>

    JavaScript中的CSS选择器

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <div id="div1">
                <p id="p1" class="class1">
                        我是第一个P
                </p>
                    <p id="p2" class="class2">
                        我是第二个P
                    </p>
            </div>
            
            <script>
                var node = document.querySelector("#div1 > p");
                alert(node.innerHTML);
                var node1 = document.querySelector(".class2");
                alert(node1.innerHTML);
                
                var nodelist = document.querySelectorAll("p");
                alert(nodelist[0].innerHTML + " - " + nodelist[1].innerHTML);
            </script>
        </body>
    </html>

    通过以上方法 可以获取我们想要操作的HTML 元素 我们可以改变该元素的文本他内容 也可以改变该元素的一些属性
    :举个例子看一看

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
                div {
                    position: relative;
                    width: 170px;
                    height: 30px;
                }
                #changeP {
                    margin: 6px auto;
                    position: absolute;
                    left: 10px;
                }
                #changeImg {
                    position: absolute;
                    margin: 6px auto;
                    right: 10px;
                }
                button {
                    border-radius: 4px;
                    background: orange;
                    border-style: none;
                }
            </style>
        </head>
        <body>
            <p id="pId">双休日上班很烦躁哎</p>
            <img id="imageId" src="../img/bottom.png" />
            <div>
                <button id="changeP">改变文本内容</button>
                <button id="changeImg">改变图片</button>
            </div>
            <p></p>
            <script>
                //获取所有的p节点
                var p = document.getElementById("pId");
                var img = document.getElementById("imageId");
                var isChange = true;
                function alertToUser() {
                    if (p.innerText == "双休日上班很烦躁哎") {
                        p.innerText = "吼吼哈嘿";
                    }else {
                        p.innerText = "双休日上班很烦躁哎";
                    }
                }
                function changeImage() {
                    if (isChange) {
                        img.src = "../img/top.png";
                        isChange = false;
                    }else {
                        img.src = "../img/bottom.png";
                        isChange = true;
                    }
                }
                document.getElementById("changeImg").addEventListener("click",changeImage);
                document.getElementById("changeP").addEventListener("click", alertToUser);    
            </script>
            
        </body>
    </html>

    获取到元素后 改变元素的样式:

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
            *{
                margin: 30px;
            }
                p {
                    color: blue;
                }
            </style>
        </head>
        <body>
            
            <p id="changeColor">我本来的颜色是蓝色的 </p>
            
            <script>
                var p = document.getElementById("changeColor");
                p.style.transform = "rotate(45deg)";
                p.style.color = "red";
            </script>
        </body>
    </html>

    文档结构和遍历

    (1)作为节点数的文档

    1.parentNode 获取该节点的父节点

    2.childNodes 获取该节点的子节点数组

    3.firstChild 获取该节点的第一个子节点

    4.lastChild 获取该节点的最后一个子节点

    5.nextSibling 获取该节点的下一个兄弟元素

    6.previoursSibling 获取该节点的上一个节点的兄弟元素

    7.nodeType   节点类型 9代表Document节点 1代表Element节点 3代表Text节点,8代表Comment节点,11代表DocumentFragment节点

    8.nodeVlue Text节点或Comment节点的文本内容

    9、nodeName    元素的标签名(如P,SPAN,#text(文本节点),DIV),以大写形式表示

    注意,以上6个方法连元素节点也算一个节点。

    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style type="text/css">
            
            </style>
        </head>
        <body>
            <div id="node">
                <p id="pOne" class="classOne">我是第一个p</p>
                <p id="pTwo" class="classTwo">我是第二个p</p>
            </div>
            <script>
                var node1 = document.querySelector(".classTwo");
                alert(node1.parentNode.innerHTML); //输出  <p id="p1" class="class1">我是第一个P</p><p id="p2" class="class2">我是第二个P</p>
                
                var nodeList = document.getElementById("node");
                var arr = nodeList.childNodes;
                //解释一下为什么是 1 3  因为该方法连文本节点也会获取 所以一共有 0 空 1 我是第一个P 2 空 3 我是第二个P 4 空
                alert(arr[1].innerHTML + "  " + arr[3].innerHTML ); //输出 我是第一个P - 我是第二个P
                
            </script>
    
        </body>
    </html>

    第二个例子:

      <div id="div1">
                文本1
                <p id="p1" class="class1">
                    我是第一个P</p>
                文本2
                <p id="p2" class="class2">
                    我是第二个P</p>
                文本3
            </div>
    
        window.onload = function () {        //依次输出,文本1,我是第一个P,文本2,我是第二个P,文本3
                var node = document.getElementById("div1");
                for (var i = 0; i < node.childNodes.length; i++) {
                    if (node.childNodes[i].nodeType == 1) {
                        alert(node.childNodes[i].innerHTML);
                    }
                    else if (node.childNodes[i].nodeType == 3) {
                        alert(node.childNodes[i].nodeValue);
                    }
                }
            }

       (2)作为元素树的文档
        1、firstElementChild        第一个子元素节点
        2、lastElementChild        最后一个子元素节点
        3、nextElementSibling        下一个兄弟元素节点
        4、previousElementSibling    前一个兄弟元素节点
        5、childElementCount        子元素节点个数量
        注意,此5个方法文本节点不算进去

            <div id="div1">
                <p id="p1" class="class1">
                    我是第一个P</p>
                <p id="p2" class="class2">
                    我是第二个P</p>
          </div>
    
            window.onload = function () {
                var node = document.getElementById("div1");
                var node1 = node.firstElementChild;
                var node2 = node.lastElementChild;
    
                alert(node.childElementCount);  //输出2,div1一共有两个非文档子元素节点
                alert(node1.innerHTML);         //输出 我是第一个P
                alert(node2.innerHTML);         //输出 我是第二个P
                alert(node2.previousElementSibling.innerHTML);  //输出 我是第一个P(第二个元素节点的上一个非文本元素节点是P1)
                alert(node1.nextElementSibling.innerHTML);      //输出 我是第二个P(第一个元素节点的下一个兄弟非文本节点是P2)
            }

    通过JavaScript操作HTML 元素 基本都是用以上的几个方法。欢迎大家继续补充。

  • 相关阅读:
    无穷有界数列,必有收敛子列(待证)
    有界闭区间内的连续函数必然有界
    数学分析提纲目录
    有限覆盖定理
    函数极限的柯西收敛准则
    数列的柯西收敛准则证明-----华东师大构造数列证明法
    数列柯西收敛准则的子列收敛证明法(取自中科大数分教材)
    用有限覆盖证明闭区间上的连续函数,必然一致连续
    数据库-模糊查询-like关键字-练习
    数据库-基础查询-练习
  • 原文地址:https://www.cnblogs.com/huanying2000/p/6216416.html
Copyright © 2011-2022 走看看