zoukankan      html  css  js  c++  java
  • DOM对象初识

    DOM概念DOM树

    DOM概念

    //DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。 
      当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
      HTML DOM 模型被构造为对象的树。
      
    //DOM标准规定HTML文档中的每个成分都是一个节点(node):
        文档节点(document对象):代表整个文档
        元素节点(element 对象):代表一个元素(标签)
        文本节点(text对象):代表元素(标签)中的文本
        属性节点(attribute对象):代表一个属性,元素(标签)才有属性
        注释是注释节点(comment对象) 
    
    //JavaScript 可以通过DOM创建动态的 HTML:
        JavaScript 能够改变页面中的所有 HTML 元素
        JavaScript 能够改变页面中的所有 HTML 属性
        JavaScript 能够改变页面中的所有 CSS 样式
        JavaScript 能够对页面中的所有事件做出反应(鼠标点击事件,鼠标移动事件等)
    

    直接查找标签

    #和css一样想要操作某个标签就要先找到这个便签
    //document.getElementById()
    	根据ID来获取一个标签
        //查找id为d1的标签赋值给divELe变量
        var divEle =document.getElementByID('d1');//直接返回一个元素对象
    //document.getElementByClassName()
    	根据ClassName来获取一个标签
        //查找className为c1的标签赋值给divELe变量
        var divEle=document.getElementByClassName('c1');//返回元素组成的数组
    //document.getElementsByTagName()
    	根据标签名获取一个标签合集(数组)
    	//查找所有的P标签,返回一个数组,赋值给divEle变量
    	var divEle=document.getElementsByTagName('p');//返回元素组成的数组
    

    间接查找标签

    parentElement            父节点标签元素
    children                 所有子标签
    firstElementChild        第一个子标签元素
    lastElementChild         最后一个子标签元素
    nextElementSibling       下一个兄弟标签元素
    previousElementSibling   上一个兄弟标签元素
    #示例:
    <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
        <div class="c1" id="d1">
            are you ok?
            <span id="s1">span1</span>
            <span id="s2">span2</span>
            <span id="s3">span3</span>
        </div>
        <div class="c1 c2">
            div2
        </div>
    </body>
    </html>
    #想要操作便签先获取这个标签:
    	var divEle=document.getElementById('d1');//查找id为d1的字段	
    #查看父节点的标签元素
    	divEle.parentElement;//返回父级标签
    #查看所有的子标签
    	divEle.children;
    	//结果:HTMLCollection(3) [span#s1, span#s2, span#s3, s1: span#s1, s2: span#s2, s3: span#s3] 返回的是一个数组
    #查看第一个子标签的元素
    	divELe.firstElementChild;//返回第一个子标签
    #查看最后一个子标签的元素
    	divEle.lastElementChild;//返回最后一个子标签
    #下一个兄弟标签
    	divEle.nextElementSibling;//返回下一个同级标签
    #上一个兄弟标签
    	divEle.previousElementsibling;//返回上一个同级标签,没有就返回null
    

    标签操作

    创建节点(创建标签)

    var divEle=document.createElement('标签名');
    //divEle就是一个新创建出来的标签对象
    #示例:
    	<!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
        <div class="c1" id="d1">
            are you ok?
            <span id="s1">span1</span>
            <span id="s2">span2</span>
            <span id="s3">span3</span>
        </div>
        <div class="c1 c2">
            div2
        </div>
        </body>
        </html>
    

    添加标签

    #追加一个子节点(作为最后一个节点)
        //先获取要操作的标签
        var divEle=document.getElementById('d1');
        //创建一个要添加子标签
        var aEle=document.createElement('a');
        //往标签中添加一个子标签
        divEle.appendChild(aEle);
    #往某个节点前面增加一个节点
    	//先获取要操作的标签
        var divEle=document.getElementById('d1');
    	//创建一个要添加子标签
        var aEle=document.createElement('a');
    	//可以往子标签中添加属性和text文本
    	aEle.href='www.baidu.com';
    	aEle.innerText='百度';
    	//查找divEle标签中所有的子标签
    	var divEl = divEle.children;
    	//把aEle标签添加到divEle某个子标签的前面
    	divEle.insertBefore(a,divEl[0])
    

    删除节点

    #获得要删除的元素,通过父元素调用该方法删除
    	父级标签.removeChild(要删除的节点)
    //获取父级标签
    	var divEle = document.getElementById('d1');
    //获取要删除的标签
    	var divRe = document.getElementById('s2');
    //使用removeChild方法删除标签
    	divEle.removeChild(divRe);
    

    替换节点

    #父节点.replaceChild(新标签,旧儿子)
    //获取父级标签
    	var divEle = document.getElementById('d1');
    //获取要被替换的标签
    	var divRe = document.getElementById('s2');
    //新建一个要替换的标签
    	var div = document.createElement('a');
    //替换标签
    	divEle.replaceChild(div,divRe);
    

    标签(节点)的文本操作

    //divEle.innerText  
    	输入这个指令,一执行就能获取该标签和内部所有标签的文本内容
    //divEle.innerHTML  
        获取的是该标签内的所有内容,包括文本和标签
    
    //获取要操作的标签
    	var divEle = document.getElementById("d1");
    //获取所有的文本内容
    	divEle.innerText;
    //获取所有的标签加上文本内容
    	divEle.innerHtml;
    //设置文本内容
    	divEle.innerText='xxx';
    	divEle.innerHtml='<a href="">百度</a>';
    

    标签的属性操作

    //获取要操作的标签
    	var divEle = document.getElementById("d1");
    //给标签添加一个属性
    	divEle.setAttribute('age','18');
    //获取标签的属性
    	divEle.getAttribute('age');
    //删除一个标签属性
    	divEle.removeAttribute('age');
    //如果是标自带的属性是可以直接用赋值的方式设置值
    	<a href="http://www.baidu.com">百度</a>
    	//给a标签设置值
    	var a = document.getElementsByTagName('a');
    	a[0].href;  获取值
    	a[0].href = 'xxx'; 设置值
    

    获取值的操作

    //elementNode.value 	适用于以下标签,用户输入或者选择类型的标签:
          1.input   
          2.select
          3.textarea 
    var iEle = document.getElementById("i1");
    	console.log(iEle.value);
    var sEle = document.getElementById("s1");
    	console.log(sEle.value);
    var tEle = document.getElementById("t1");
    	console.log(tEle.value);  
    

    类名操作

    //获取要操作的标签
    	var divEle = document.getElementById("d1");
    //获取对象的所有class类值
    	divEle.classList;
    //删除指定的类值
    	divEle.classList.remove(cls);
    //添加一个类值
    	divEle.classList.add(cls) 
    //判断有没有这个类值,	存在返回true,否则返回false
    	classList.contains(cls)  
    //存在就删除,否则添加,toggle的意思是切换,有了就给你删除,如果没有就给你加一个
    	classList.toggle(cls)  
    

    css设置

    //1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:
    	obj.style.margin
        obj.style.width
        obj.style.left
        obj.style.position
    //2.2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:
        obj.style.marginTop
        obj.style.borderLeftWidth
        obj.style.zIndex
        obj.style.fontFamily
    

    事件

    //onclick        
    	当用户点击某个对象时调用的事件句柄。
    //ondblclick     
    	当用户双击某个对象时调用的事件句柄。
    //onfocus        
    	元素获得焦点。 输入框
    //onblur         
    	元素失去焦点.	应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
    //onchange       
    	域的内容被改变.	应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)
    //onkeydown      
    	某个键盘按键被按下。  应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
    //onkeypress    
    	某个键盘按键被按下并松开。
    //onkeyup        
    	某个键盘按键被松开。
    //onload        
    	一张页面或一幅图像完成加载。
    //onmousedown   
    	鼠标按钮被按下。
    //onmousemove   
    	鼠标被移动。
    //onmouseout     
    	鼠标从某元素移开。
    //onmouseover   
    	鼠标移到某元素之上。
    //onselect     
    	在文本框中的文本被选中时发生。
    //onsubmit      
    	确认按钮被点击,使用的对象是form。
    //简单示例:
    	<html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
            <style>
                .cc1 {
                     100px;
                    height: 100px;
                    background-color: red;
                }
                .cc2{
                    background-color: green;
                }
            </style>
        </head>
        <body>
        <div class="cc1 xx xx2" id="d1">
        </div>
        <script>
            //当用户点击ID为d1的标签的时候,触发事件
            var divEle = document.getElementById('d1');
            divEle.onclick = function () {
                divEle.style.backgroundColor = 'purple';
            }
        </script>
        </body>
        </html>
    

    绑定事件的两种方式

    #方式1:
        <script>
            var divEle = document.getElementById('d1');  //1.找到标签
            divEle.onclick = function () {       //2.给标签绑定事件
                divEle.style.backgroundColor = 'purple';
            }
        </script>
        
        	//下面的this表示当前点击的标签
            var divEle = document.getElementById('d1');
            divEle.onclick = function () {
                this.style.backgroundColor = 'purple';
            }
        
    #方式二:
    	//标签属性写事件名称=某个函数();
    	<div class="cc1 xx xx2" id="d1" onclick="f1();"></div>
    	
        <script>
        	//js里面定义这个函数
            function f1() {
                var divEle = document.getElementById('d1');
                divEle.style.backgroundColor = 'purple';
            }
        </script>
        
        //获取当前操作标签示例,this标签当前点击的标签
        	<div class="cc1 xx xx2" id="d1" onclick="f1(this);"></div>
            function f1(ths) {
                ths.style.backgroundColor = 'purple';
            }
    

    动态显示时间

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <input type="text" id="timer">
    <button id="start">开始</button>
    <button id="end">结束</button>
    </body>
    <script>
        var a;
        // 获取当前时间,并赋值到input标签中
        function f1() {
            var d = new Date();
            var dStr = d.toLocaleString();
    
            var inp = document.getElementById('timer');
            inp.value = dStr;
        }
        var startBtn = document.getElementById('start');
        startBtn.onclick = function () {
            f1();
            if (a === undefined){
                a = setInterval(f1,1000); //开启定时器,重复执行f1函数 a=111
            }
        };
        // 点击结束按钮,清除定时器
        var endBtn = document.getElementById('end');
    
        endBtn.onclick = function () {
            clearInterval(a);
            a = undefined;
        }
    </script>
    

    select省级联动

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>select联动</title>
    </head>
    <body>
    <select id="province">
      <option>请选择省:</option>
    </select>
    <select id="city">
      <option>请选择市:</option>
    </select>
    <script>
        var data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
        var provinceSelect = document.getElementById('province');
        var citySelect = document.getElementById('city');
        // 显示省份
        for (var pro in data){
            var proEle = document.createElement('option');
            proEle.innerText = pro;
            provinceSelect.appendChild(proEle)
        }
        provinceSelect.onchange = function () {
            // console.log('xxxxx');
            // console.log(this.selectedIndex);
            citySelect.innerHTML = '<option>请选择市:</option>';
            console.log(this.options[this.selectedIndex].innerText);
            var citys = data[this.options[this.selectedIndex].innerText];
            for (var i in citys){
                // citys[i]
                var cityEle = document.createElement('option');
                cityEle.innerText = citys[i];
                citySelect.appendChild(cityEle);
            }
        }
    </script>
    </body>
    </html>
    
  • 相关阅读:
    WPS企业版序列号
    局域网远程
    win10 新增、删除、重命名文件需要刷新才更新的问题
    nginx配置文件参数详解
    TCP/IP协议明明白白
    iperf3
    华为交换机流量统计
    delphi 数据库技术沉浮录--谨献给成为历史的BDE
    在ubuntu 上使用wine 运行Delphi win32 应用
    kbmmw 中实现客户端自动更新
  • 原文地址:https://www.cnblogs.com/luckinlee/p/11622025.html
Copyright © 2011-2022 走看看