DOM查找练习

运用知识点:

浏览器在加载一个页面的时候,是按照自上而下的顺序加载的,读取到一行就运行一行,如果将script标签写到也免得上边,在代码执行时,页面还没有加载DOM对象也没有加载,会导致无法获取到DOM对象,里面的button还没有加载,所获取到的btn对象为空

浏览器在加载一个页面的时候,是按照自上而下的顺序加载的,读取到一行就运行一行,如果将script标签写到也免得上边,在代码执行时,页面还没有加载DOM对象也没有加载,会导致无法获取到DOM对象,里面的button还没有加载,所获取到的btn对象为空

DOM查询

获取元素节点

通过document对象调用

1getElementById()  通过id属性获取一个元素节点对象

2.getElementsByTagName() 通过标签名获取一组元素节点对象

3.getElementsByName() 通过name属性获取一组元素节点对象,获取表单项

通过点击页面中的按钮实现相关js功能。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        window.onload = function () {
            //1.查找北京节点
            //为id为btn01的按钮设置一个单击响应函数
            var btn01 = document.getElementById("btn01");//获取btn对象
            btn01.onclick = function () {
                var bj = document.getElementById("bj");//查找id为bj的节点
                //通过innerHTML获取元素内部的html代码
                alert(bj.innerHTML);
            };
            //2.查找所有li节点
            //为btn02的按钮绑定一个点击响应函数
            var btn02 = document.getElementById("btn02");
            btn02.onclick = function () {
                var lis = document.getElementsByTagName("li");/* 这个方法给我们返回一个类数组对象,
                所有查询到的元素封装到对象中 */
                //遍历lis
                //alert(lis.length);
                for (var i = 0; i < lis.length; i++) {
                    alert(lis[i].innerHTML);
                }
            };
            //3.查找name等于gender的所有节点
            //为btn03按钮绑定一个单击响应函数
            var btn03 = document.getElementById("btn03");
            btn03.onclick = function () {
                var inputs = document.getElementsByName("gender");
                for (var i = 0; i < inputs.length; i++) {
                    //innerHTML用于获取元素内部的HTML代码的,input是没有内部的,对于自结束标签没有意义
                    alert(inputs[i].value);/* 如果要读取元素节点的属性,直接用元素.属性名, 例如:元素.id  元素.name
                        元素.value但是calss属性不能采用,要使用
                          元素 .className */
                }

            };
            //4.查找#city下的所有子节点
            //为id为btn04的按钮绑定一个单击响应函数
            var btn04 = document.getElementById("btn04");
            btn04.onclick = function () {
                //获取id为city的元素节点
                var city = document.getElementById("city");

                var lis = city.getElementsByTagName("li");//document在整个页面查询而city在当前ul里查询

                for (var i = 0; i < lis.length; i++) {
                    alert(lis[i].innerHTML);
                }
            };
            //5.返回city的所有子节点
            //为idbtn05绑定一个单击响应函数
            var btn05 = document.getElementById("btn05");
            btn05.onclick = function () {
                //获取id为city的元素节点
                var city = document.getElementById("city");
                //返回city的所有子节点
                var cns = city.childNodes;/* childNodes会获取包括文本节点在内的所有节点,
                根据DOM标准标签间的空白也会当成文本节点 */
                //alert(cns.length);

                var cns2 = city.children;//children属性可以获取当前元素所有子元素,不包括空白节点
                alert(cns2.length);
            };
            //6.返回#phone的第一个子节点
            //为id为btn06的按钮绑定一个单击响应函数
            var btn06 = document.getElementById("btn06");
            btn06.onclick = function () {
                //获取id为phone的元素节点
                var phone = document.getElementById("phone");
                //返回#phone的第一个子节点
                var fir = phone.firstChild;//列表项有空格获得空格
                fir = phone.firstElementChild//获取当前元素的第一个子元素,firstElementChild不支持IE8以下的浏览器
                alert(fir.innerHTML);
            };

            /*以上代码都是重复的:所以写一个函数简化代码  
             定义一个点击函数,专门用来未指定元素绑定单击响应函数
                 参数:
                    idStr 要绑定单机响应函数的对象的id属性值
                    fun 事件的回调函数,当单击元素时,该函数会被触发
            */
            function myClick(idStr, fun) {
                var btn = document.getElementById(idStr);//获取btn对象
                btn.onclick = fun;

            }
            //7.返回id为#bj的父节点
            // 为id为btn07的按钮绑定一个单击响应函数
            myClick("btn07", function () {
                //获取id为bj的节点
                var bj = document.getElementById("bj")
                //返回#bj的父节点
                var pn = bj.parentNode;
                alert(pn.innerHTML);
                /*
                innerHTML:是获取内部HTML代码
                innerText:获取到元素的文本内容,和innrtHTML类似,不同的是他会自动将html去除
                */
            });

            //8.返回#android的一个兄弟节点
            //为idbtn08按钮绑定一个单击想隐函数
            myClick("btn08", function () {
                //获取id为android的元素
                var and = document.getElementById("android");
                //返回#android的前一个兄弟节点
                var ps = and.previousSibling;//可能获取到空白文本
                ps = and.previousElementSibling;
                alert(ps.innerHTML);
                //返回#android的后一个兄弟节点
                var pe = and.nextSibling;//列表项前有空格获取空格
                pe = and.nextElementSibling;
                alert(pe.innerHTML);
            });

            //9.读取#username的value属性值
            myClick("btn09", function () {
                //获取id为username的元素
                var um = document.getElementById("username");
                //读取#username的value属性值 文本框的value属性值就是文本框中的内容
                alert(um.value);
            });

            //10.设置username的value属性值
            myClick("btn10", function () {
                //获取id为username的元素
                var um = document.getElementById("username");
                //读取#username的value属性值 文本框的value属性值就是文本框中的内容
                um.value = "今天天气很不错";
            });

            //11.返回#bj文本值
            myClick("btn11", function () {
                /*  //获取id为bj的元素
                 var bj = document.getElementById("bj");
                 alert(bj.innerHTML); 下面也可以:*/

                //获取bj的文本节点
                var fc = bj.firstChild;
                alert(fc.nodeValue);//nodeValue获取文本加点的值
            });


        };
    </script>
</head>

<body>
    <div class="total">
        <div class="inner">
            <p>你喜欢哪个城市?</p>
            <ul id="city">
                <li id="bj">北京</li>
                <li>上海</li>
                <li>东京</li>
                <li>首尔</li>
            </ul>
            <br>
            <br>
            <p>你喜欢单机游戏吗?</p>
            <ul class="game">
                <li id="r1">红警</li>
                <li>实况</li>
                <li>极品飞车</li>
                <li>魔兽</li>
            </ul>
            <br>
            <br>
            <p>你手机的操作系统是?</p>
            <ul id="phone">
                <li>IOS</li>
                <li id="android">Android</li>
                <li>Windows Phone</li>
            </ul>
        </div>
    </div>
    <div class="inner">
        gender:
        <input type="radio" name="gender" value="male">
        Male:
        <input type="radio" name="gender" value="female">
        <br>
        <br>
        name:
        <input type="text" name="name" id="username" value="abcde">
    </div>
    <div class="btnList">
        <div><button id="btn01">查找#bj节点</button></div>
        <div><button id="btn02">查找所有li节点</button></div>
        <div><button id="btn03">查找name=gender的所有节点</button></div>
        <div><button id="btn04">查找#city下的所有li节点</button></div>
        <div><button id="btn05">查找#city下的所有子节点</button></div>
        <div><button id="btn06">查找#phone的第一个子节点</button></div>
        <div><button id="btn07">查找#bj的父节点</button></div>
        <div><button id="btn08">查找#android的前一个兄弟节点</button></div>
        <div><button id="btn09">查找#username的value属性值</button></div>
        <div><button id="btn10">设置#username的value属性值</button></div>
        <div><button id="btn11">返回#bj文本值</button></div>
    </div>
</body>

</html>

展示画面:

第一个按钮点击:查找北京节点

第三个按钮点击 :查找name等于gender的所有节点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵俺第一专栏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值