JS的DOM(获取元素、元素属性、value属性、显示时间、计时器、节点增删改查等)

一. 获取元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function test() {
            // 获取userName的两种方法:
            // 1. 根据ID获取userName对象,一个ID只能使用一次
            let userName = document.getElementById("userName");
            // console.log(userName);  // <input id="userName" type="text">
            // alert(userName);  // [object HTMLInputElement]


            // 2. 根据标签名来获取userName对象
            // 这里注意,因为同一个标签名对应有多个标签内容
            // 因此这里得到的是一个数组
            let userNameList = document.getElementsByTagName("input");
            // console.log(userNameList[0]);  // <input id="userName" type="text">
            // alert(userNameList[0]);  // // [object HTMLInputElement]
            // 展示数组中每个元素——使用for循环
            // for (let i = 0; i < userNameList.length; i++) {
            //     alert(userNameList[i]);  // 5个[object HTMLInputElement]
            // }


            // 根据元素的属性(name属性)来获取对应标签信息
            // 注意这里同样是数组
            let hobbyList = document.getElementsByName("hobby");
            // console.log(hobbyList[0]);  // <input type="checkbox" name="hobby" value="eat">
            // alert(hobbyList[0]);  // [object HTMLInputElement]
            // alert(hobbyList[0].nodeName);  // INPUT(获取节点名字)
            // alert(hobbyList[0].nodeType);  // 1(获取节点类型)


            // 根据标签名查找所有子节点(chileNodes)
            var pNodes = document.getElementsByTagName("p");
            // var childNodes = pNodes[0].childNodes;
            // console.log(childNodes);  // NodeList(3) [ #text, span, #text ]
            // alert(childNodes[0]).nodeType;  // [object Text](查看子节点类型,空格或换行都属于文本节点)


            // 获取父节点(parentNode)
            let parentNode = pNodes[0].parentNode;
            // console.log(parentNode);  // <body onload="test()">
            // alert(parentNode);  // [object HTMLBodyElement]


            // 获取同级节点
            let otherNode = pNodes[0].nextElementSibling;
            // console.log(otherNode);  // <p class="p2">
            // alert(otherNode);  // [object HTMLParagraphElement]
            // alert(otherNode.nodeName);  // p


            // 获取元素hr
            let hrNode = pNodes[0].previousElementSibling.nodeName;
            alert(hrNode);  // HR
        }
    </script>
</head>
<!--这里的作用是让页面先加载好再执行上面的JS代码-->
<body onload="test()">
    用户名:<input type="text" id="userName" />
    密码:<input type="text" id="userPwd" />
    兴趣爱好:吃<input type="checkbox" name="hobby" value="eat" /><input type="checkbox" name="hobby" value="drink" /><input type="checkbox" name="hobby" value="happy" />
    <hr />
    <p class="p1">
        <span>今天礼拜五</span>
    </p>
    <p class="p2">
        <span>明天礼拜六</span>
    </p>
</body>
</html>

 

 

二. 元素的属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // 页面加载完成后执行function函数中的js代码
        window.onload = function () {
            // 根据元素的class属性查找
            let pNodes = document.getElementsByClassName("p1");
            console.log(pNodes[0].innerHTML);  // <span>今天礼拜六</span>
            // 获取元素p1的html内容
            // alert(pNodes[0].innerHTML);  // <span>今天礼拜六</span>

            // 改变元素p1的html内容
            pNodes[0].innerHTML = "<h1>内容已变</h1>";
        };

    </script>
</head>
<body>
    <p class="p1">
        <span>今天礼拜六</span>
    </p>
    <p class="p2">
        <span>明天礼拜日</span>
    </p>
</body>
</html>

 

 

三. value属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        // value属性只存在以下三种标签中
        // input textarea select
        function setText() {
            // 修改输入框value的属性值
            document.getElementById("userName").value = "显示信息变了";
        }
        
        function getText() {
            // 获得输入框value的属性值
            let userName = document.getElementById("userName");
            alert(userName);
        }
    </script>
</head>
<body>
    <input type="text" id="userName" value="显示信息1">
    <input type="text" onclick="setText()" value="显示信息2">
    <input type="text" onclick="getText()" value="显示信息3">
</body>
</html>

 

 

四. 显示系统时间

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function showTime() {
            let dayMsg = new Date();
            let year = dayMsg.getFullYear(); // 获取年份
            let month = dayMsg.getMonth();  // 获取月份
            let day = dayMsg.getDate();  // 获取日
            let hour = dayMsg.getHours();  // 获取小时
            let minute = dayMsg.getMinutes();  // 获取分钟
            let second = dayMsg.getSeconds();  // 获取秒

            let nowTime = year + "" + month + "" + day + "" + hour + "" + minute + "" + second + "";
            let spanNode = document.getElementById("systime");
            // 设置span标签要显示的内容
            spanNode.innerHTML = nowTime.fontcolor("blue");
        }

        window.onload = function () {
            // 设置一秒的延迟再执行function函数
            setInterval("showTime()", 1000);
        }
    </script>
</head>
<body>
    <span id="systime"></span>
</body>
</html>

 

 

五. 计时器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        let sec = 0;
        let min = 0;
        let ho = 0;
        let taskId;  // 设置定时器ID

        // 开始计时
        function start() {
            if (taskId == null) {
                taskId = setInterval(function () {
                    sec++;  // 先让秒针计数
                    if (sec == 60) {
                        min++;  // 每60s加1分钟,秒针重置为0
                        sec = 0;
                    }
                    if (min == 60) {
                        ho++;
                        min = 0;
                    }
                    if (ho == 24) {
                        sec = 0;
                        min = 0;
                        ho = 0;
                    }
                    // 显示设置,当秒数、分钟数、小时数小于10,前面要加个0
                    if (sec < 10) {
                        document.getElementById("second").innerHTML="0" + sec;
                    } else {
                        document.getElementById("second").innerHTML=sec;
                    }
                    if (min < 10) {
                        document.getElementById("minute").innerHTML="0" + min;
                    } else {
                        document.getElementById("minute").innerHTML=min;
                    }
                    if (ho < 10) {
                        document.getElementById("hour").innerHTML="0" + ho;
                    } else {
                        document.getElementById("hour").innerHTML=ho;
                    }
                }, 100)
            }
        }
        
        function stop() {
            clearInterval(taskId);
            taskId = null;
        }
    </script>
</head>
<body>
    <span id="hour">00</span>
    <span id="minute">00</span>
    <span id="second">00</span>
    <hr />
    <input type="button" value="点击开始计时" onclick="start()" />
    <input type="button" value="点击停止计时" onclick="stop()" />
</body>
</html>

 

 

六. 购物车全选功能

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function selectAll() {
            // 设置"全选"所在标签的状态
            let status = document.getElementById("shopping").checked;
            // 设置所有"checkbox"的标签的状态跟"全选"的状态一样
            let cbNodes = document.getElementsByTagName("input");
            for (let i = 0; i < cbNodes.length; i++) {
                cbNodes[i].checked = status;
            }
        }
    </script>
</head>
<body>
    <!--
        cellpadding: 单元格与单元格之间的距离
        cellspacing:单元格与格子里的内容的距离

        tr: 表格头
        th: 表格行
        td: 表格单元
    -->
    <table border="1" cellspacing="0" width="300px">
        <tr align="center">
            <th><input type="checkbox" id="shopping" onclick="selectAll()" /></th>
            <th>商品名称</th>
            <th>价格</th>
            <th>库存</th>
        </tr>
        <tr align="center">
            <td><input type="checkbox"></td>
            <td>电冰箱</td>
            <td>2000</td>
            <td>100</td>
        </tr>
        <tr align="center">
            <td><input type="checkbox"></td>
            <td>洗衣机</td>
            <td>2500</td>
            <td>100</td>
        </tr>
        <tr align="center">
            <td><input type="checkbox"></td>
            <td>空调</td>
            <td>3000</td>
            <td>100</td>
        </tr>
    </table>
</body>
</html>

 

 

七. 创建和删除节点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        window.onload = function () {
            // 创建一个元素p
            let pNode = document.createElement("p");
            // 给新建的p元素新建内容
            pNode.innerHTML="<h1>这是一个标题</h1>";
            // 获取body元素
            // 方法一
            // let bodeNode = document.getElementsByTagName("body")[0];
            // 方法二
            let bodyNode = document.body;
            // 把刚才新建的元素p添加到body中
            // 注意默认放在body中已有元素的后面
            bodyNode.appendChild(pNode);

            // 删除刚才新建的p元素,这里为了看效果,设置1s的时间延迟
            // setTimeout(function () {
            //     // 因为加上刚才新建的p元素,总共有三个p元素,所以这里索引值为2
            //     let pNode = document.getElementsByTagName("p")[2];
            //     document.body.removeChild(pNode);
            // }, 1000);

            // 现在还剩两个p元素
            // 在两个p元素之间插入一个p元素的方法
            let p1Node = document.createElement("p");
            let p2Node = document.getElementsByTagName("p")[1];
            p1Node.innerHTML="我是新建的p元素";
            document.body.insertBefore(p1Node, p2Node);
        }
    </script>
</head>
<body>
    <p>这是段落一内容</p>
    <p>这是段落二内容</p>
</body>
</html>

 

 

八. 添加和删除附件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function addRow() {
            // 创建一个新的tr节点
            let trNode = document.createElement("tr");

            // tr里面还要创建两个td节点
            let td1 = document.createElement("td");
            // 注意这里的方法
            td1.innerHTML = "<input type='file' />";
            let td2 = document.createElement("td");
            td2.innerHTML = "<input type='button' value='删除文件' onclick='delRow(this)' />";

            // 把两个td节点添加进新建的tr节点中
            trNode.appendChild(td1);
            trNode.appendChild(td2);

            // 把新建的tr节点添加到tbody节点里,注意要放到添加按钮的前面
            let tbodyNode = document.getElementsByTagName("tbody")[0];
            let lastTrNode = document.getElementById("lastRow");
            tbodyNode.insertBefore(trNode, lastTrNode);
        }

        function delRow(inputNode) {
            // 获取点击按钮所在行的tr节点
            let trNode = inputNode.parentNode.parentNode;
            // 删除该tr节点
            let tbodyNode = document.getElementsByTagName("tbody")[0];
            tbodyNode.removeChild(trNode);
        }
    </script>
</head>
<body>
    <table border="1" cellspacing="0" width="300">
        <tr>
            <td><input type="file" /></td>
            <!--this表示当前的input元素-->
            <td><input type="button" value="删除文件" onclick="delRow(this)"></td>
        </tr>

        <tr>
            <td><input type="file" /></td>
            <td><input type="button" value="删除文件" onclick="delRow(this)"></td>
        </tr>

        <tr id="lastRow">
            <td colspan="2">
                <input type="button" value="再添加一行" onclick="addRow()">
            </td>
        </tr>
    </table>
</body>
</html>

 

 

九. 操作元素CSS

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function changeCSS() {
            let aNode = document.getElementsByTagName("a")[0];
            aNode.style.fontSize = "30px";
            aNode.style.color = "blue";
            aNode.style.textDecoration = "None";
        }
    </script>
</head>
<body>
    <a href="">这是一个链接</a>
    <input type="button" value="点我改变前面的样式" onclick="changeCSS()" />
</body>
</html>

 

 

十. 生成验证码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        window.onload = function() {
            let arr = ["", "a", "9", "", "c", "3"];
            // 生成四位数验证码
            let vrCode = "";
            for (let i = 0; i < 4; i++) {
                let index = Math.floor(Math.random() * arr.length);
                vrCode += arr[index];
            }
            // 把验证码显示在span标签中
            let spanNode = document.getElementById("vrCode");
            spanNode.innerHTML = vrCode;
            spanNode.style.backgroundColor = "lightgray";
            spanNode.style.color = "blue";
            spanNode.style.fontSize = "100px";
            spanNode.style.textDecoration = "line-through";
            spanNode.style.display = "block";
            spanNode.style.width = "500px";
            spanNode.style.textAlign = "center";
        }
    </script>
</head>
<body>
    <span id="vrCode" style="display:none"></span>
</body>
</html>

 

posted @ 2019-03-02 15:32  星满夜空  阅读(13049)  评论(0编辑  收藏  举报