javascript day05 外部对象,document对象(DOM模型),查询节点的方式

目录

1.外部对象

    1.BOM 和 DOM

    2.window 对象(BOM模型)

        3.window中的定时器

        4.window中的属性

2.document 对象(DOM模型)

    1.document 的概述

    2.查找元素节点

    3.读取节点的信息

    4.获取 或 设置 元素节点的属性

    5.元素节点的样式

3.查询节点的方式


1.外部对象


    1.BOM 和 DOM

        BOM:Browser Object Model
            浏览器对象模型
            将浏览器比喻成一个对象-window(网页初始化时自动创建的),可以通过 window对象操控浏览器中的内容

        DOM:Document Object Model
            文档对象模型
            将HTML文档比喻成一个对象 - document(属于window的一个属性),可以灵活的操控网页上的内容

    2.window 对象(BOM模型)

        1.作用

            表示浏览器
            window对象下的属性和方法在使用时,可以省略window.直接去调用
            ex:
                window.alert() --> alert()
                window.prompt() --> prompt()
                window.document --> document
                window.history --> history

        2.window中的对话框

            1.警告框
                window.alert() / alert()
            2.输入框
                window.prompt() / prompt()
            3.确认框
                window.confirm("") / confirm("")
                点击 "确定" 按钮的话,返回 True 其余所有操作,都返回false

            练习:
                1.网页中创建一个 按钮,显示"关闭"
                2.点击按钮时,弹出确认框"确认关闭网页吗"
                3.如果点击确定的话,则关闭网页
                    关闭网页: window.close();
                4.否则什么都不操作即可

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Document</title>
</head>
<body>
    <script>
        function testConfirm(){
            if(confirm("确认关闭网页吗")){
                close();
            }                
        }
    </script>
    <button onclick="testConfirm()">关闭</button>
</body>
</html>

        3.window中的定时器

            1.定时器的分类
                1.周期性定时器
                    每间隔一段时间后,就执行一段程序,反复执行
                2.一次性定时器
                    在指定的时间间隔后,只执行一次操作
            2.周期性定时器
                1.声明定时器
                    var ret = setInterval(fun,time);
                    fun:函数,要周期性执行的操作,可以是匿名函数
                    time:要间隔的时间周期,以毫秒为单位的数字
                    ret:返回已创建好的定时器对象
                2.清除定时器
                    window.clearInterval(timer)
                    timer: 要停止的定时器对象

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Document</title>
</head>
<body>
    <script>
        // 保存创建好的定时器对象
        var timer;
        // 每隔1s打印当前时间
        function showTime(){
            timer = setInterval(function(){
                var now = new Date();
                console.log(now.toLocaleString());
            },1000);
        }
        // 暂停定时器(清除)
        function stopTime(){
            clearInterval(timer);
        }
    </script>
    <button onclick="showTime()">显示时间</button>
    <button onclick="stopTime()">暂停</button>
</body>
</html>

            3.一次性定时器
                1.声明定时器
                    var ret = setTimeout(fun,time);
                    fun:等待一定时间后要执行的操作
                    time:要等待的时长,以ms为单位
                    ret:创建好的定时器对象
                2.清除定时器
                    clearTimeout(timer);
                    timer:已经创建好的一次性定时器对象
                练习:
                    1.创建一个按钮
                    2.点击按钮时,弹出一个确认框
                        确认一下是否要关闭网页??
                    3.如果用户点击确定的话,5s钟之后再关闭网页

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Document</title>
</head>
<body>
    <script>
        function closePage(){
            if(confirm("确认关闭网页吗")){
                setTimeout(function(){
                    close();
                },5000);            
            }
        }
    </script>
    <button onclick="closePage()">关闭</button>
</body>
</html>

        4.window中的属性

            1.screen 属性
                作用:获取客户端显示器的相关信息
                属性:
                    1.width / height
                        获取屏幕分辨率
                    2.availWidth / availHeight
                        可用宽度和可用高度
            2.history 属性
                1.作用:处理当前窗口所访问过的url地址们
                2.属性&方法:
                    1.属性:length,表示当前窗口所访问过的url数量
                    2.方法:
                        1.back():后退
                        2.forward():前进
                        3.go(num)
                            在当前页面的基础上前进或后退num步
                            num:
                                取值为正,前进
                                取值为负,后退
            3.location 属性
                1.作用
                    表示浏览器地址栏的信息
                2.属性&方法
                    1.属性:href
                        表示当前窗口中正在浏览的网页地址
                        如果为href属性设置值的话,相当于实现了浏览器跳转的功能
                        location.href = www.baidu.com
                    2.方法:reload()
                        从新加载当前网页,等同于刷新操作
            4.navigator 属性
                1.作用
                    封装了浏览器的相关信息
                2.属性
                    userAgent:显示浏览器相关信息
            5.document 属性(重点)

2.document 对象(DOM模型)

    1.document 的概述

        document对象,是DOM模型中的顶层对象,封装了所有和HTML元素相关的属性,方法以及事件.
        由于document是属于window对象的核心属性之一,所以不用声明在网页中就可以直接使用

        网页在加载的时候,会在内存中形成一颗节点树(DOM树).DOM树会封装网页上所有的内容.
        网页上的每一个元素,每一个属性,每一段文本,都是DOM树上的一个独立的"节点"

        DOM所提供的操作:
            1.查找节点的操作方法
            2.读取节点的信息
            3.修改节点的信息
            4.删除节点
            5.创建节点

        注意:只要DOM树上的内容产生变化的话,网页也会一同变化

        DOM树上的节点的类型:
            1.元素节点 - 表示的是网页中的一个元素
            2.属性节点 - 表示的是元素中的一个属性
            3.文本节点 - 表示的是元素中的文本内容
            4.注释节点 - 表示网页中的一个注释
            5.文档节点 - 表示整个HTML文档

    2.查找元素节点

        1.通过元素id查找元素节点
            前提:元素一定要具备id属性,否则无法查找
            方法:
            var elem = document.getElementById("元素ID");(低版本支持)
                elem:对应的ID的元素在JS中的表现形式 - DOM元素/DOM对象
                变简介的方法
                    1.在DOM中,允许直接使用元素的ID进行元素的操作(低版本浏览器不支持)
                    2.放进函数里
                        function $(id){
                            return document.getElementById(id);
                        }
        DOM对象属性:
            1.innerHTML
                修改 或 获取当前DOM对象的HTML文件
            2.innerText
                修改 或 获取当前DOM对象的普通文本
            注意:以上两个属性只针对双标记有效


            3.value
                该属性只针对表单控件,允许获取或设置表单控件的值

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Document</title>
</head>
<body>
    <p>
        用户名称:<input type="text" id="uname">
    </p>
    <p>
        <button onclick="getUname()">获取/设置文本框的值</button>
    </p>
    <script>
        function getUname(){
            // 通过id=uname 得到input元素
            var uname = document.getElementById("uname");
            // 获取 或 设置 uname 的 value值
            console.log(uname.value);
            // 为 uname 的 value 属性赋值
            uname.value = "动态设置的文本"
        }
    </script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<p>
		用户名称: <input type="text" id="uname">
		<button onclick="checkUname()">验证</button>
	</p>
	<div id="uname-show"></div>
	<script src="common.js"></script>
	<script>
		/*function checkUname(){
			//1.获取 id 为 uname 的文本框的 value 值
			var val = document.getElementById("uname").value;
			var uShow = document.getElementById("uname-show");
			//2.判断 value 值得长度范围,并将结果显示在 id为 uname-show 的 div 元素中
			if(val.length >= 6 && val.length <= 18){
				uShow.innerText = "通过";
			}else{
				uShow.innerText = "用户名称不规范";
			}
		}*/

		function checkUname(){
			
			//1.获取 id 为 uname 的文本框的 value 值
			var val = $("uname").value;
			//2.判断 value 值得长度范围,并将结果显示在 id为 uname-show 的 div 元素中
			if(val.length >= 6 && val.length <= 18){
				$("uname-show").innerText = "通过";
			}else{
				$("uname-show").innerText = "用户名称不规范";
			}
		}
	</script>
</body>
</html>

    3.读取节点的信息

        1.节点的类型
            属性:nodeType
            值:
                返回1:元素节点
                返回2:属性节点
                返回3:文本节点
                返回8:注释节点
                返回9:文档节点
        2.节点名称
            属性:nodeName
                元素节点 或 属性节点:返回标签名或属性名
                文本节点:返回 #text
                文档节点:返回 #document
                注释节点:返回 #comment

    4.获取 或 设置 元素节点的属性

        所有元素节点具备以下方法,用于操作属性:
        1.getAttribute("attrName")
            作用:获取指定属性的值
            attrName:要获取的属性名称
            返回值:attrName属性对应的值
        2.setAttribute("attrName","attrValue")
            作用:设置指定属性的值
            attrName:要设置的属性名
            attrValue:要设置的属性值
        3.removeAttribute("attrName")
            作用:将 attrName 属性从节点中删除出去
        练习:
            1.创建一个网页
            2.创建一个a标记,
                链接地址为:http://www.baidu.com
                文本:百度
            3.创建一个按钮,文本为修改
            4.点击按钮时,将a标记修改为
                链接地址为:http://www.tmooc.cn
                文本:TMOOC

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Document</title>
</head>
<body>
    <a href="http://www.baidu.com" id="anchor">百度</a>
    <button onclick="btnChange()">变</button>
    <script src="common.js"></script>
    <script>
        function btnChange(){
            var a = $("anchor");
            a.innerHTML = "TMOOC";
            a.setAttribute("href","http://www.tmooc.cn");
        }
    </script>
</body>
</html>

    5.元素节点的样式

        1.使用setAttribute() 设置 class 属性值
            相当于动态的为元素绑定类选择器
            elem.setAttribute("class","类选择器")
        2.使用元素的 className 属性修改 class 的值
            elem.className = "类选择器"
        3.变相的使用内联方式设置属性 
            elem.style.css属性名 = 值;

            elem.style.color = "red";
            注意:
                如果css属性名中包含"-"的话,"-"要取消,并且后面的单词的首字符变大写
                elem.style.fontSize = "18px";
                //设置 elem 元素有边框的颜色为红色
                elem.style.borderRightColor:"red";

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Document</title>
    <style>
        #main{
            width: 300px;
            height: 200px;
            background: red;

        }
        .hide{
            display: none;
        }
    </style>
</head>
<body>
    <script src="common.js"></script>
    <div id="main">这是测试div</div>
    <button onclick="btnRadius()">边框倒角</button>
    <button onclick="btnShow()">显示</button>
    <button onclick="btnHide()">隐藏</button>
    <script>
        function btnRadius(){
            $("main").style.borderRadius = "50%";
        }
        function btnHide(){
            // 动态的为 #main 元素绑定 class 属性,值为 hide
            // $("main").setAttribute("class","hide"); 
            $("main").className="hide"
        }
        function btnShow(){
            //动态的将 #main 的 class 属性值清除
            // $("main").removeAttribute("class");
            $("main").className = "";

        }
    </script>
</body>
</html>

3.查询节点的方式

    1.根据id查询  
        document.getElementById();
    2.根据节点的层级关系查询节点
        1.parentNode属性
            返回当前节点的父节点元素
        2.childNodes属性
            返回当前节点的所有子元素数组
        3.chiledren属性
            返回当前节点的所有子元素数组(元素节点)
        4.nextSibling
            获取当前节点的下一个兄弟节点
        5.nextElementSibling
            获取当前节点的下一个元素兄弟节点
        6.previousSibling
            获取当前节点的上一个兄弟节点
        7.previousElementSibling
            获取当前节点的上一个兄弟元素节点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="main">
        <p id="pp">这是main中的p</p>
    </div>

    <div id="poem">
        <h3 id="title">静夜思</h3>
        <p>床前明月光</p>
        <p>疑是地上霜</p>
        <p>举头望明月</p>
        <p>低头思故乡</p>
    </div>

    <button onclick="getParent()">获取pp的父元素</button>
    <button onclick="getChild()">获取poem的子元素</button>
    <button onclick="getChildren()">获取poem的子元素</button>
    <button onclick="getNextSib()">获取h3的下一个兄弟节点</button>

    <script src="common.js"></script>
    <script>
        function getNextSib(){
            //获取下一个兄弟节点
            //var elem = $("title").nextSibling;

            //获取下一个元素兄弟节点
            var elem=$("title").nextElementSibling;
            console.log(elem);
        }

        function getChildren(){
            var arr=$("poem").children;
            console.log(arr);
        }

        function getChild(){
            var poem = $("poem");
            var arr = poem.childNodes;
            //循环遍历arr中的每个元素
            for(var i=0;i<arr.length;i++){
                // console.log(arr[i].nodeType + ":" + arr[i].nodeName);
                // 将元素节点过滤出来
                if(arr[i].nodeType == 1){
                    arr[i].style.color="red";
                }

                // arr[i].style.color = "red";
            }
        }

        function getParent(){
            var pp = $("pp");
            var parent = pp.parentNode;
            console.log(parent);
        }
    </script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/zh__quan/article/details/81734899