前端三贱客 -- JavaScript中的DOM元素

文档对象模型(Document Object Model,DOM)是一种用于HTML编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。DOM相当于是一个模块,提供了关于HTML文档中对标签进行操作的功能,JavaScript结合DOM可以对HTML中的标签进行操作。可以把DOM看做是一张映射表,记录着一堆用代码操控document时的规章制度,直白点说,就是js操作html时的API。

DOM选择器

DOM中提供了一系列的选择器用于在HTML文档中找到指定的相关标签对象。

直接查找

document.getElementById(arg)             // 根据ID获取一个标签对象
document.getElementsByClassName(arg)     // 根据class属性获取标签对象集合
document.getElementsByName(arg)          // 根据name属性值获取标签对象集合
document.getElementsByTagName(arg)       // 根据标签名获取标签对象集合

示例一:

<!DOCTYPE html>
<html>
<head>
    <title>Dom Test</title>
    <style type="text/css">
        .c1{
            background-color: red;
            width: 400px;
            height: 200px;
        }
        .c2{
            font-size: 20px;
            color: white;
            text-align: center;
            line-height: 200px;
        }
    </style>
</head>
<body>
    <input type="text" name="username" id="id1" size="20"><br>
    <input type="text" name="username" size="20"><br>
    <input type="text" name="username" size="20"><br>
    <div id="i2">this is a div</div>
    <a href="">111</a>
    <a href="">222</a>
    <div class="c1 c2">Hello Kugou!</div>
    <input type="button" onclick="func1()" value="点我getElementById">
    <input type="button" onclick="func2()" value="点我getElementsByName">
    <input type="button" onclick="func3()" value="点我change div value">
    <input type="button" onclick="func4()" value="点我getElementsByTagName">
    <input type="button" onclick="func5()" value="点我getElementsByClassName">
    <script type="text/javascript">
        function func1(){
            var username_id = document.getElementById("id1");
            console.log(username_id.value);
            alert(username_id.value);
        }
        function func2(){
            var username = document.getElementsByName("username");
            for(var i=0;i < username.length;i++){
                console.log(username[i].value);
                alert(username[i].value)
            }
        }
        function func3(){
            var x = document.getElementById("i2");
            x.innerText="Hello Kugou!";
        }
        function func4(){
            /* body... */
            var a_list=document.getElementsByTagName("a");
            for (var i = 0;i<a_list.length;i++){
                var var1 = a_list[i].innerText;
                a_list[i].innerText=var1 + "AAA";
            }
        }
        function func5(){
            var var_sty = document.getElementsByClassName("c1");
            console.log(var_sty);
            var_sty[0].style.backgroundColor = ‘#00ff00‘;
        }
    </script>
</body>
</html>

间接查找

var tag = document.getElementById(arg);
tag.parentElement           // 找当前标签对象的父标签对象
tag.children                // 找当前标签对象的所有子标签对象
tag.firstElementChild       // 找当前标签对象的第一个子标签对象
tag.lastElementChild        // 找当前标签对象最后一个子标签对象
tag.nextElementtSibling     // 找当前标签对象下一个兄弟标签对象
tag.previousElementSibling  // 找当前标签对象上一个兄弟标签对象

示例二:

<head>
    <title></title>
    <style type="text/css">
        table {
          /*   border: 1px solid; */
            border-collapse: collapse;
        }

        table th, table td{
            border: 1px solid;
            padding : 8px;
        }
        table th {
            font-weight: bold;
        }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>主机ip</th>
                <th>端口号</th>
                <th>备注</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1.1.1.1</td>
                <td>80</td>
                <td>web端口</td>
                <td><input type="button" value="删除" onclick="deleteRow(this)"></td>
            </tr>
            <tr>
                <td>2.2.2.2</td>
                <td>3306</td>
                <td>MySQL端口</td>
                <td><input type="button" value="删除" onclick="deleteRow(this)"></td>
            </tr>
            <tr>
                <td>2.2.2.2</td>
                <td>6379</td>
                <td>Redis端口</td>
                <td><input type="button" value="删除" onclick="deleteRow(this)"></td>
            </tr>
        </tbody>
    </table>
    <script type="text/javascript">
        function deleteRow(self){
            var rowTr = self.parentElement.parentElement;
            // alert(rowTr.value);
            rowTr.remove();
        }
    </script>

DOM文本操作

对标签内部文本进行操作时,可以通过 innerText 和 innerHTML来进行。

innerText

    标签对象.innerText,读取标签内容(仅文本)。
    标签对象.innerText="武",修改标签内容(仅文本)。

innerHTML

    标签对象.innerHTML,读取标签内容(含标签)。
    标签对象.innerText="<a href=‘#‘>武</a>",修改标签内容(可标签、课文本)。

示例三

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        table {
            border-collapse: collapse;
        }
        table th, table td{
            border: 1px solid;
            padding: 8px;
        }
        table td{
            font-size: 18px;
        }
        a{
            text-decoration: none;
        }
        a:link {color:#FF0000;}    /* 未被访问的链接 */
        a:visited {color:#00FF00;} /* 已被访问的链接 */
        a:hover {color:#FF00FF;}   /* 鼠标指针移动到链接上 */
        a:active {color:#0000FF;}  /* 正在被点击的链接 */
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>网站链接</th>
                <th>网站介绍</th>
                <th>读取</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td><a href="https://www.kugou.com">酷狗</a></td>
                <td>Hello Kugou 就是歌多</td>
                <td>
                    <input type="button" name="" value="读取网站innerText" onclick="readSite(this)">
                    <input type="button" name="" value="读取完整innerHTML" onclick="readSummary(this)">
                </td>
            </tr>
        </tbody>
    </table>
    <script type="text/javascript">
        function readSite(self){
            var inner_text_01 = self.parentElement.previousElementSibling.previousElementSibling;
            alert(inner_text_01.innerText);
            inner_text_01.innerText="百度";
            var inner_text_02 = self.parentElement.previousElementSibling;        
            alert(inner_text_02.innerText)
            inner_text_02.innerText=‘百度一下 你就知道‘        
        }
        function readSummary(self){
            var inner_HTML = self.parentElement.previousElementSibling.previousElementSibling;
            alert(inner_HTML.innerHTML)
            inner_HTML.innerHTML="<a href=\"https://www.baidu.com\">百度</a>" 
        }
    </script>
</body>
</html>

DOM值操作

文本框

<body>
    <input type="text" name="username" value="请输入用户名XXX" id="user">
    <script type="text/javascript">
        var username = document.getElementById("user")
        console.log("获取文本框值",username.value)
        username.value = "nuanhuang"
        console.log("更新文本框值",username.value)
    </script>
</body>

多行文本框

<h3>个人简介</h3>
<textarea id="article" cols="30" rows="10">不以物喜,不以己悲,先天下之忧而忧,后天下之乐而乐
</textarea><br>
<input type="button" value="获取" onclick="get()">
<input type="button" value="更新" onclick="update()">
<script type="text/javascript">
    function get() {
        // body...
        var contents = document.getElementById("article")
        alert(contents.value) 
    }
    function update() {
        var contents = document.getElementById("article")
        contents.value = "瞎扯淡"
    }
</script>

下拉框

<h3>居住地</h3>
    <select id="city" >
        <option value="0">北京</option>
        <option value="1">上海</option>
        <option value="2" selected="selected">广州</option>
        <option value="3">深圳</option>
    </select>
    <input type="button" value="获取居住地" onclick="getCity()">
    <input type="button" value="更新" onclick="updateCity()">
    <script type="text/javascript">
        function getCity() {
            // body...
            var city = document.getElementById("city")
            switch (city.value) {
                case "0":
                    alert(‘北京‘)
                    break;
                case "1":
                    alert(‘上海‘)
                    break;
                case "2":
                    alert(‘广州‘)
                    break;
                case "3":
                    alert(‘深圳‘)
                    break;
                default:
                    // statements_def
                    alert(‘未知城市‘)
                    break;
            }
        }
        function updateCity() {
            var city = document.getElementById("city")
            city.value = 0
        }
    </script>

单选框

<h3>性别</h3>
<input type="radio" name="gender" checked="checked" value=0>男
<input type="radio" name="gender" value=1>女
<br>
<input type="button" value="显示值" onclick="getGender()">
<input type="button" value="更新值" onclick="updateGender()">
<script type="text/javascript">
    function getGender(){
        var gender = document.getElementsByName("gender")
        for(var i = 0;i < gender.length;i++){
            if(gender[i].checked){
                alert(gender[i].value);
            }
        }
    }
    function updateGender(){
        var gender = document.getElementsByName("gender")
        for(var i = 0;i < gender.length;i++){
            if(gender[i].value == "1"){
                alert(‘xxx‘)
                gender[i].checked = true;
            }
        }
    }
</script>

复选框

<h3>爱好</h3>
<input type="checkbox" class="favi" value="0">篮球 
<input type="checkbox" class="favi" value="1">足球
<input type="checkbox" class="favi" value="2">羽毛球
<input type="checkbox" class="favi" value="3">乒乓球
<br>
<input type="button" value="显示值" onclick="getFavi()">
<input type="button" value="反选" onclick="updateFavi()">
<script type="text/javascript">
    function getFavi(){
        var valueList = []
        var faviList = document.getElementsByClassName("favi")
        for(var i=0;i<faviList.length;i++){
            if(faviList[i].checked){
                valueList.push(faviList[i].value)
            }
        }
        console.log(valueList)
        alert(valueList)
    }
    function updateFavi(){
        var faviList = document.getElementsByClassName("favi")
        for(var i=0;i<faviList.length;i++){
            if(faviList[i].checked){
                faviList[i].checked = false;
            }else {
                faviList[i].checked = true;
            }
        }
    }
</script>

表格

<table>
    <thead>
        <tr>
            <th>选择</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
    </thead>
    <tbody id="tb">
        <tr>
            <td><input type="checkbox" value="0"></td>
            <td>李白</td>
            <td>18</td>
        </tr>
        <tr>
            <td><input type="checkbox" value="1"></td>
            <td>杜甫</td>
            <td>20</td>
        </tr>
        <tr>
            <td><input type="checkbox" value="2"></td>
            <td>王维</td>
            <td>21</td>
        </tr>
    </tbody>
</table><br>
<input type="button" value="全选" onclick="checkAll()">
<input type="button" value="取消" onclick="cancelAll()">
<input type="button" value="反选" onclick="checkReverse()">
<script type="text/javascript">
    function checkAll(){
        var trResList = document.getElementById("tb").children;
        for(var i = 0;i< trResList.length;i++){
            var trTag = trResList[i];
            trTag.firstElementChild.firstElementChild.checked = true;
        }
    }
    function cancelAll(){
        var trResList = document.getElementById("tb").children;
        for(var i = 0;i<trResList.length;i++){
            var trTag = trResList[i];
            trTag.firstElementChild.firstElementChild.checked = false;
        }
    }
    function checkReverse(){
        // alert("xxx")
        var trResList = document.getElementById("tb").children;
        for(var i=0;i<trResList.length;i++){
            var trTag = trResList[i];
            var inputTagRes = trTag.firstElementChild.firstElementChild;
            if(inputTagRes.checked){
                inputTagRes.checked = false;
            }else{
                inputTagRes.checked = true;
            }
        }
    }
</script>

View Code 

CLASS属性

  • 标签对象.className,class属性对应的值直接操作。
  • 标签对象.classList.remove(cls),class属性对应值删除某个样式。
  • 标签对象.classList.add(cls),class属性中添加样式。

示例三:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        body{
            margin: 0 auto;
        }
        .header{
            height: 38px;
            background-color: #499ef3;
            position: fixed;top:0;right:0;left:0;
        }
        .header .menu{
            width: 960px;
            margin: 0 auto;
            height: 38px;
        /*     background-color: red; */
        }
        .header .menu .left_menu{
            float: left;
            line-height: 38px;
        }
        .header .menu .left_menu img{
            width: 38px;
            height: 38px;
            border-radius: 50%;
        }
        .header .menu .right_menu{
            float: right;
            line-height: 38px;
        }
        .header .menu .right_menu a{
            text-decoration: none;
            display: inline-block;
            line-height: 38px;
            padding: 0 3px;
            color: red;
        }
        .header .menu .right_menu a:hover{
            background-color: #dddddd;
        }
        .content{
            width: 960px;
            margin: auto;
            margin-top: 38px;
            word-wrap:break-word;  
            word-break:break-all;  
            overflow: hidden; 
        }
        .content p{
            word-wrap:break-word;  
            word-break:break-all;  
            overflow: hidden; 
        }
        .zhezhao{
            position: fixed;top: 0;right: 0;bottom: 0;left: 0;
            background-color: gray;
            opacity: 0.5;
            z-index: 1;
        }
        .login{
            width: 500px;
            height: 300px;
            position: fixed;
            top: 50%;
            left: 50%;
            margin-left: -250px;
            margin-top: -150px;
            background-color: yellow;
            z-index: 2;
        }
        .login .input_sty{
            text-align: center;
            margin-top: 100px;
        }
        .login .input_sty p{
            display: inline;
        }
        .hide{
            display: none;
        }

    </style>
</head>
<body>
    <div class="header">
        <div class="menu">
            <div class="left_menu">
                <img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2563547461,1954620067&fm=26&gp=0.jpg">
            </div>
            <div class="right_menu">
                <a onclick="login()">登录</a>
                <a href="">注册</a>
                <a href="">收藏</a>
            </div>
        </div>
    </div>
    <div id="zhezhao_id" class="zhezhao hide"></div>
    <div id="login_id" class="login hide">
        <div class="input_sty">
            <p>用户名:</p><input type="text" name="" value="请输入用户名:">
            <br><br>
            <p>密&nbsp;&nbsp;&nbsp码:</p><input type="password" name="" value="">
            <br><br>
            <input type="button" name="" value="登录">
            <input type="button" name="" value="重置">
            <input type="button" name="" value="返回" onclick="goBack()">
        </div>
    </div>
    <div class="content">
        <p>dsfasfasadfasfasfasdfasdfasdfasdfasdfasdfsadfasfasfasadfasfasfasdfasdfasdfasdfasdfasdfsadfasfasfasadfasfasfasdfasdfasdfasdfasdfasdfsadfasdfasdfasdfasdfasdfasdfasdfsasdfasdfasdfasdfasdfasdf</p>
    </div>
    <script type="text/javascript">
        function login(){
            // alert("xxxx")
            document.getElementById("zhezhao_id").classList.remove("hide");
            document.getElementById("login_id").classList.remove("hide");
        }
        function goBack(){
            document.getElementById("zhezhao_id").classList.add("hide");
            document.getElementById("login_id").classList.add("hide");
        }
    </script>
</body>
</html>
View Code

Style样式操作

如果想要对样式操作的粒度更细一些,可以使用style样式操作,他比class属性对样式的操作粒度更细。

示例四:

更换标题颜色

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        body {margin: 0 auto;}
        .header {
            height: 38px;
            background-color: #dde369;
            text-align: center;
            line-height: 38px;
        }
    </style>
</head>
<body>
    <div id="header-id" class="header">且行且歌,行稳致远。</div>
    <input type="button" name="" value="换肤" onclick="change()">
    <script type="text/javascript">
        function change() {
            // body... 
            document.getElementById("header-id").style.backgroundColor = "#a1648d";
        }
    </script>
</body>
</html>

示例五:

开关灯测试

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JavaScript学习</title>
    <style type="text/css">
        .body{
            position: fixed;
            top: 0;left: 0;bottom: 0;right: 0;
            background-color: white;
            z-index: 1;
        }
        input{
            position: fixed;
            top: 50%;right: 50%;
            width: 80px;
            height: 80px;
            background-color: #854243;
            z-index: 2;
            color: white;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div id="i1" class="body">开关灯测试</div>
    <div class="menu">
        <input id="i2" type="button" onclick="guandeng()" name="" value="关灯">
    </div>
    <script type="text/javascript">
        function guandeng(){
            if(document.getElementById("i1").style.backgroundColor  != "gray"){
                document.getElementById("i1").style.backgroundColor = "gray";
                document.getElementById("i2").value="开灯";
                document.getElementById("i2").style.backgroundColor = ‘#12ddaa‘;
            }else {
                document.getElementById("i1").style.backgroundColor = "white";
                document.getElementById("i2").value="关灯";
                document.getElementById("i2").style.backgroundColor = ‘#854243‘;
            }
            // text.innerText="xxxx";
        }
    </script>
</body>
</html>

示例五:

点赞

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        body{
            margin: 0 auto;
        }
        .container{
            width: 800px;
            height: 200px;
            border: 1px solid #dddddd;
            margin: auto;
            margin-top: 20px;
        }
        .container .title{
            font-size: 20px;
            font-weight: bold;
            margin: 5px;
        }
        .container img{
            margin: 5px;
            width: 120px;
            height: 120px;
        }
        .container .item{
            font-size: 18px;
            margin-left:  5px;
            color: green;
            /* 指定鼠标的类型 */
            cursor: pointer;
            position: relative;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="title">hello kugou!</div>
        <div><img src="https://imgessl.kugou.com/custom/150/20200106/20200106143601439455.jpg"></div>
        <div class="item" onclick="doFavor(this)">点赞</div>
    </div>
    <div class="container">
        <div class="title">就是歌多!</div>
        <div><img src="https://imgessl.kugou.com/custom/150/20200103/20200103091738993254.jpg"></div>
        <div class="item" onclick="doFavor(this)">点赞</div>
    </div>
    <script type="text/javascript">
        function  doFavor(self) {
            var plusTag = document.createElement(‘span‘);
            var fontSize = 10;
            var marginLeft = 10;
            var marginTop = 10;
            var opacity = 1;
            plusTag.innerText = "+1";
            plusTag.style.color = ‘green‘;
            plusTag.style.position = ‘absolute‘;
            plusTag.style.fontSize = fontSize + ‘px‘;
            plusTag.style.marginLeft = marginLeft + ‘px‘;
            plusTag.style.marginTop = marginTop + ‘px‘;
            plusTag.style.opacity = opacity;
            self.appendChild(plusTag);
            var interval = setInterval(function () {
                fontSize += 3;
                marginLeft += 5;
                marginTop -= 5;
                opacity -= 0.2;
                plusTag.style.fontSize = fontSize + ‘px‘;
                plusTag.style.marginLeft = marginLeft + ‘px‘;
                plusTag.style.marginTop = marginTop + ‘px‘;
                plusTag.style.opacity = opacity;
                if (opacity <= 0) {
                    self.removeChild(plusTag);
                    clearInterval(interval);
                }
            }, 100)
        }
    </script>
</body>
</html>

事件

  • onclick       单击时触发事件
  • ondblclick  双击触发事件
  • onchange  内容修改时触发事件
  • onfocus     获取焦点时触发事件
  • onblur        失去焦点触发事件

示例六:菜单栏

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        body{
            margin: auto;
        }
        .pg-header{
            height: 38px;
            background-color: #499ef3;
            text-align: center;
            line-height: 38px;
            font-size: 28px;
            color: blue;
            font-weight: bold;
        }
        .menu{
            position: fixed;
            width: 220px;
            left: 0;top: 38px;bottom: 0;
            /* background-color: gray;
            opacity: 0.5; */
            overflow: scroll;

        }
        .content{
            position: fixed;
            top: 38px;right: 0;bottom: 0;left: 220px;
            background-color: orange;
            overflow: scroll;
        }
        .menu .title{
            height: 28px;
            background-color: #5f4687;
            color: white;
            line-height: 28px;
            font-size: 16px;
            padding: 8px;
            border-bottom: 1px solid #dddddd;
            /* border-right: 1px solid #dddddd; */
        }
        .menu .child{
            /* display: block; */
            /* background-color: yellow; */
            border-bottom: 1px solid #dddddd;
        }
        .menu .child a{
            display: block;
            text-decoration: none;
            padding: 5px 10px;
            color: black;
            z-index: 10;
        }
        .menu .child a:hover{
            background-color: #dddddd;
        }
        .hide {
            display: none;
        }
    </style>
</head>
<body>
    <div class="pg-header">东方好莱坞</div>
    <div class="menu">
        <div class="title" onclick="showMenu(this)">国产电影</div>
            <div class="child">
                <a href="#">我不是药神</a>
                <a href="#">我和我的祖国</a>
                <a href="#">中国机长</a>
            </div>
        
        <div class="title" onclick="showMenu(this)">日韩电影</div>
            <div class="child  hide">
                <a href="">我的野蛮女友</a>
                <a href="">素媛</a>
                <a href="">熔炉</a>
            </div>

        <div class="title" onclick="showMenu(this)">欧美电影</div>
            <div class="child hide">
                <a href="">肖申克的救赎</a>
                <a href="">飞跃疯人院</a>
                <a href="">阿甘正传</a>
            </div>
    </div>
    <div class="content">xxxx</div>
    <script type="text/javascript">
        function showMenu(self){
            // body...
            var childList = document.getElementsByClassName(‘child‘);
            for(var i=0;i< childList.length;i++){
                childList[i].classList.add("hide")
            }
            self.nextElementSibling.classList.remove(‘hide‘)
        }
    </script>
</body>
</html>

示例七:文本框

<!DOCTYPE html>
<html>
<head>
    <meta charset=‘utf-8‘/>
    <title>DOM</title>
    <style>
        .gray {
            color: gray;
        }
        .red {
            color: red;
        }
    </style>
</head>
<body>
<input type=‘text‘ class=‘gray‘ value=‘请输入关键字‘ onfocus=‘getFocus(this);‘ onblur=‘leave(this);‘/>
<script type="text/javascript">
    function getFocus(self) {
        self.className = ‘red‘;
        if (self.value === ‘请输入关键字‘ || self.value.trim().length === 0) {
            self.value = ‘‘;
        }
    }
    function leave(self) {
        if (self.value.length === 0) {
            self.value = ‘请输入关键字‘;
            self.className = ‘gray‘;
        } else {
            self.className = ‘red‘;
        }
    }
</script>
</body>
</html>

相关推荐