• 前端之DOM


    前端之DOM

    DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。是一套对文档的内容进行抽象和概念化的方法。 当网页被加载时,浏览器会创建页面的文档对象模型。HTML DOM 模型被构造为对象的树。

    HTML DOM 树

    img

    DOM标准规定HTML文档中的每个成分都是一个节点(node):

    • 文档节点(document对象):代表整个文档
    • 元素节点(element 对象):代表一个元素(标签)
    • 文本节点(text对象):代表元素(标签)中的文本
    • 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
    • 注释是注释节点(comment对象) 

    JavaScript 可以通过DOM创建动态的 HTML:

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

    查找标签

    直接查找

    document.getElementById 根据ID获取一个标签
    document.getElementsByClassName 根据class属性获取
    document.getElementsByTagName 根据标签名获取标签合集
    

    间接查找

    parentElement            父节点标签元素
    children                 所有子标签
    firstElementChild        第一个子标签元素
    lastElementChild         最后一个子标签元素
    nextElementSibling       下一个兄弟标签元素
    previousElementSibling   上一个兄弟标签元素
    

    节点操作

    创建节点

    var divEle = document.createElement("div");

    添加节点

    追加一个子节点(作为最后的子节点)

    somenode.appendChild(newnode);

    把增加的节点放到某个节点的前边。

    somenode.insertBefore(newnode,某个节点);

    删除节点:

    获得要删除的元素,通过父元素调用该方法删除。

    somenode.removeChild(要删除的节点)

    替换节点:

    somenode.replaceChild(newnode, 某个节点);

    属性节点

    获取文本节点的值:

    var divEle = document.getElementById("d1")
    divEle.innerText
    divEle.innerHTML
    

    设置文本节点的值:

    var divEle = document.getElementById("d1")
    divEle.innerText="1"
    divEle.innerHTML="<p>2</p>"
    

    attribute操作

    var divEle = document.getElementById("d1");
    divEle.setAttribute("age","18") // 设置属性
    divEle.getAttribute("age")  // 获取属性的值
    divEle.removeAttribute("age")  // 移除属性
    // 自带的属性还可以直接.属性名来获取和设置
    imgEle.src
    imgEle.src="..."
    

    class的操作

    className 获取所有样式类名(字符串)
    classList.remove(cls) 删除指定类 classList.add(cls) 添加类
    classList.contains(cls) 存在返回true,否则返回false
    classList.toggle(cls) 存在就删除,否则添加
    

    指定CSS操作

    obj.style.backgroundColor="red"

    JS操作CSS属性的规律:

    1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:

    obj.style.margin
    obj.style.width
    obj.style.left
    obj.style.position
    

    2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:

    obj.style.marginTop
    obj.style.borderLeftWidth
    obj.style.zIndex
    obj.style.fontFamily
    

    事件

    ​ HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。

    常用事件

    onclick        当用户点击某个对象时调用的事件句柄。
    ondblclick     当用户双击某个对象时调用的事件句柄。
    onfocus        元素获得焦点。               // 练习:输入框
    onblur         元素失去焦点。               
    应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
    
    onchange       域的内容被改变。             
    应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)
    
    onkeydown      某个键盘按键被按下。          
    应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
    
    onkeypress     某个键盘按键被按下并松开。
    onkeyup        某个键盘按键被松开。
    onload         一张页面或一幅图像完成加载。
    
    onmousedown    鼠标按钮被按下。
    onmousemove    鼠标被移动。
    onmouseout     鼠标从某元素移开。
    onmouseover    鼠标移到某元素之上。
     
    onselect      在文本框中的文本被选中时发生。
    onsubmit      确认按钮被点击,使用的对象是form。
    

    绑定方式:

    // 方式一 (简洁易懂)
    <div id="d1" onclick="changeColor(this);">点我</div>
    <script>
      function changeColor(ths) {
          ths.style.backgroundColor="green";
      }
    </script>
    注意:
    this是实参,表示触发事件的当前元素。
    函数定义过程中的ths为形参。
    
    // 方式二 (常用,推荐)
    <div id="d2">点我</div>
    <script>
       var divEle2 = document.getElementById("d2");
       divEle2.onclick=function () {
         this.innerText="呵呵";
       }
    </script>
    

    实例一:时间显示器

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <input type="text" id="a1" >
    <input type="button" value="开始" id="start">
    <input type="button" value="暂停" id="stop">
        <script>
            var t;
            var a1Ele=document.getElementById("a1");
            var stopEle=document.getElementById("stop");
            var startEle=document.getElementById("start")
            function showtime() {
                var date_obj=new Date();
                var now_time=date_obj.toLocaleString();
                a1Ele.value=now_time;
            }
            startEle.onclick=function(){
                if (!t){
                     t=setInterval(showtime,1000)
                }
            };
            stopEle.onclick=function () {
                clearInterval(t)
                t=""
            }
        </script>
    </body>
    </html>
    

    实例二:搜索框

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <input type="text" id="a1" value="请输入" onfocus="foo()" onblur="foo1()">
    <script>
        var aEle = document.getElementById('a1')
    
        function foo() {
            var value = aEle.value
            if (value == '请输入搜索内容') {
                aEle.value = ''
            }
        }
        function foo1() {
            var value = aEle.value
            if (!value) {
                aEle.value = '请输入搜索内容'
            }
        }
    </script>
    </body>
    </html>
    
  • 相关阅读:
    设计模式---工厂模式和抽象工厂模式
    设计模式---简单工厂模式
    设计模式---设计模式的分类及六大原则
    分布式---Raft算法
    分布式---Paxos算法
    分布式---CAP和BASE理论
    分布式---分布式事务
    分布式---分布式锁
    css
    react生命周期
  • 原文地址:https://www.cnblogs.com/dadazunzhe/p/11680288.html
Copyright © 2020-2023  润新知