BOM、DOM编程(二)

1.1 DOM编程概念

  • Document Object Model 文档对象模型,用于操作网页中的html元素。

1.2 DOM编程的作用

  •  一个html页面被加载到浏览器的时候,浏览器会为每一个html标签都会创建一个对应的对象进行描述,然后网页上显示的内容其实就是这些html标签对应的属性信息,如果我们想要改变页面显示的内容,那么就应该拿到这些对象,改变对象的属性信息,从而控制页面的显示效果。

 

  • document代表了整个HTML的文档信息。
  • 在dom编程中任何一个HTML标签对应的对象,我们都习惯称作为节点对象。Node
  •  这些对象全部都被保存到一个document对象中。document对象也被称作为文档树

1.3 根据标签的属性找节点方法

  •  注意:凡是节点都具备两个属性:nodeName(节点的名字),nodeType
获取元素的方法作用
document.getElementById("id")通过id属性得到唯一的元素<br/>如果页面上有多个同名的id,则得到第1个元素
document.getElementsByName("name")通过name属性得到一组标签,返回一个数组
document.getElementsByTagName("标签名")通过标签名字得到一组标签,返回一个数组
document.getElementsByClassName("类名")通过类名得到一组标签,返回一个数组

1.3.1 通过标签属性找节点代码演示: 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>根据标签的属性找元素</title>
    <script type="text/javascript">

     window.onload = function () {
         /*//根据标签的id属性找节点
         var input = document.getElementById("b2");

         alert(input.nodeName);*/

         //找到b3
         var input = document.getElementById("b3");
         //给input标签注册一个事件
         input.onclick = function () {
             //根据标签的name属性,返回的是一个数组
             var divs = document.getElementsByName("one");
             //遍历divs数组
             for(var index = 0;index<divs.length;index++){
                 divs[index].innerHTML = "我是div";
             }
         }

         //根据标签名找标签
         var button2 =  document.getElementById("b2");
         button2.onclick = function () {
             //根据标签名找标签
             var links = document.getElementsByTagName("a");
             for(var index=0;index<links.length;index++){
                 links[index].href = "http://www.baidu.com";
             }
         }
         
         //根据class值找标签
         var button3 = document.getElementById("b4");
         button3.onclick = function () {
             var calssId = document.getElementsByClassName("two");
             for(var index=0;index<calssId.length;index++){
                 calssId[index].innerHTML="我是div";
             }
         }


     }
    </script>
</head>
<body>
<input type="button" value="(通过标签名)给a链接添加地址" id="b2"/>
<input type="button" value="(通过name属性)给div设值" id="b3"/>
<input type="button" value="(通过类名)给div设值" id="b4"/>
<hr/>
<a>百度</a><br/>
<a>百度</a><br/>
<a>百度</a><br/>
<hr/>
<div name="one"></div>
<div name="one"></div>
<div name="one"></div>
<hr/>
<div class="two"></div>
<div class="two"></div>
<div class="two"></div>
</body>
</html>

1.3.2 实现多选与反选案例演示: 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
        //实现全选功能
        function selectAll(input) {
            //找到name为item的checkbox
            var items = document.getElementsByName("item");
            //遍历items,让每一个item都与全选按钮的状态一致
            for(var index=0;index<items.length;index++){
                items[index].checked =  input.checked;
            }
        }

        //实现反选功能
        function reverseSelect() {
            //找到name为item的checkbox
            var items = document.getElementsByName("item");
            //遍历items,让每一个item的checked取反
            for(var index=0;index<items.length;index++){
                //checked是布尔类型,取反只需要在前面加上取反符号即可
                items[index].checked = !items[index].checked;
            }
        }

        //结账
        function total() {
            //找到name为item的checkbox
            var items = document.getElementsByName("item");
            //定义result,保存总价格
            var result = 0;
            //遍历items,找出选中的item
             for(var index=0;index<items.length;index++){
                  if(items[index].checked){
                      //当前的选项是选中的,那么就获取其value值。
                      var price = items[index].value;
                      result +=parseInt(price);
                  }
             }

            //把总价格设置到span标签中
            document.getElementById("result").innerHTML = "总价格为&nbsp:"+result;
        }
    </script>
</head>
<body>
<h3>商品价格列表</h3>
<input type="checkbox" name="item" value="1500" /> 山地自行车1500<br />
<input type="checkbox" name="item" value="200"  /> 时尚女装200<br />
<input type="checkbox" name="item" value="3000"  /> 笔记本电脑3000元<br />
<input type="checkbox" name="item" value="800"  /> 情侣手表800<br />
<input type="checkbox" name="item" value="2000"  /> 桑塔纳2000<br />
<hr/>
<input type="checkbox" id="all" onclick="selectAll(this)"  />全选/全不选 &nbsp;
<input type="button" id="reverse" onclick="reverseSelect()"  value=" 反 选 "/>&nbsp;
<input type="button" value=" 结 账 " onclick="total()" />&nbsp;<span id="result"></span>
</body>
</html>

2.1 根据节点的关系找节点

2.1.1 节点的类型

名称节点名称节点类型
标签Element1
文本Text3
注释Comment8

 2.1.2 节点的通用属性

凡是节点都会具备以下两个属性。

属性名属性说明
nodeName标签的名字
nodeType标签的类型

2.1.3 节点与节点之间的关系

遍历节点的属性说明
childNodes得到当前元素下所有的子节点
children得到当前元素下所有的标签元素
parentNode得到当前元素的父节点
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>根据关系找节点</title>
    <script type="text/javascript">
        window.onload = function () {
            //找到div
            var div = document.getElementsByTagName("div")[0];
            //获取div的所有子节点
            var children = div.children;

            for(var index=0;index<children.length;index++){
               /* if(children[index].nodeType==1){
                   alert("节点名字:"+children[index].nodeName+"节点的类型:"+children[index].nodeType);
                }*/
                alert("节点名字:"+children[index].nodeName+"节点的类型:"+children[index].nodeType);
            }

            alert("div的父元素是:"+div.parentNode.nodeName);

        }
    </script>
</head>
<body>
<div>
    <!--注意:div中所有出现的空格,制表,换行也是文本节点 -->
    <span>王者荣耀</span>
    <br/>
    <img src="img/0.jpg" width="300px" />
</div>
</body>
</html>

 


3.1 增删改节点

创建元素的方法作用
document.createElement(“标签名”)在文档上创建一个对象
元素对象.setAttribute(“属性名”,“属性值”)给元素添加一个属性名和属性值<br/> 如果元素名不存在则是添加属性,存在则是修改属性值
将元素挂到DOM树上的方法作用
父元素.appendChild(子元素)将元素追加成父元素的最后一个子元素
父元素.removeChild(子元素)通过父元素删除一个子元素
元素.remove元素删除本身
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css"></style>
    <script type="text/javascript">
        /*增删节点主要使用的方法:
          document.createElement("标签名")  在文档上创建一个元素对象
          元素对象.setAttribute("属性名", "属性值")    给元素添加一个属性名和属性值 <br />如果元素名不存在则是添加属性,存在则是修改属性值
          父元素.appendChild(子元素)   将元素追加成父元素的最后一个子元素
          父元素.removeChild(子元素)   通过父元素删除一个子元素
          元素.remove()    元素删除本身
       */
        var num = 1;
        function addButton() {
            //创建一个节点
            var inputNode = document.createElement("input");
            //设置input标签的属性名和属性值
            inputNode.setAttribute("type","button");
            inputNode.setAttribute("value","按钮"+num++);

            //把input标签添加到body中
            var body = document.getElementsByTagName("body")[0];
            //添加
            body.appendChild(inputNode);
            
        }

        function removeButton() {
            var button = document.getElementById("b1");
            /*//自杀
            button.remove();*/
            var body = document.getElementsByTagName("body")[0];
            //使用removeChild方法的时候,一定要是被删除节点的父节点去执行该方法
            body.removeChild(button);

        }

    </script>
</head>
<body>
<input type="button" value="添加按钮" onclick="addButton()"/>
<input id="b1"  type="button" value="删除按钮" onclick="removeButton()"/>
</body>
</html>

4.1 省市联动案例: 

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>省市级联</title>
    <script type="text/javascript">
        //每个省份对应的数组
        var citys = [[""], ["广州", "湛江", "东莞", "河源"], ["南宁", "桂林", "北海", "玉林"], ["长沙", "衡阳", "岳阳", "邵阳"]];

        function selectCity(province) {
            //第一步:获取到当前省份选中的索引值
            var index = province.selectedIndex;
            //第二步:根据索引值取出对应的省份城市
            var cityDate = citys[index];
            var cityOption = "<option value=\"\">--请选择市--</option>";
            //遍历所有的城市
            for(var i=0;i<cityDate.length;i++){
                //取出每一个城市的名字
                var cityName = cityDate[i];
                cityOption += "<option>"+cityName+"</option>";
            }
            //找到城市的select
            var citySelect = document.getElementById("cityId");
            citySelect.innerHTML = cityOption;
        }

    </script>

</head>
<body>
<select id="provinceId" onchange="selectCity(this)">
    <option value="">--请选择省--</option>
    <option>广东省</option>
    <option>广西省</option>
    <option>湖南省</option>
</select>
<select id="cityId">
    <option value="">--请选择市--</option>
</select>
</body>
</html>

5.1通过js代码修改CSS样式

方式一:通过style属性操作

元素.style.样式名 = “样式值”;

方式二:通过className 操作

元素.className="类名"; 

5.1.1 隔行换色案例

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>隔行换色</title>
    <style type="text/css">
        table {
            margin: auto;
            border-collapse: collapse;
        }

        tr {
            text-align: center;
            height: 32px;
        }

        .redStyle {
            background: lightpink;
        }

        .yellowStyle {
            background: lightyellow;
        }

        .greenStyle {
            background: lightgreen;
        }
    </style>
    <script type="text/javascript">
        window.onload = function(){

            var oldColor = "";

            //找到所有的tr
            var trs = document.getElementsByTagName("tr");
            //遍历所有的tr
            for(var index = 1; index<trs.length ; index++){
                if(index%2==0){
                    //偶数行
                    trs[index].className = "redStyle";
                }else{
                    //奇数行
                    trs[index].className = "yellowStyle";
                }


                //给每行注册一个之间,鼠标经过事件
                trs[index].onmouseover = function(){
                    //记录原本的颜色
                    oldColor = this.className;
                    this.className = "greenStyle";
                }

                //注册鼠标移开事件
                trs[index].onmouseleave = function(){
                    this.className =oldColor;
                }

            }
        }

    </script>
</head>
<body>
<table id="tab1" border="1" width="800" align="center">
    <tr style="background-color: #ccc;">
        <th>分类ID</th>
        <th>分类名称</th>
        <th>分类描述</th>
        <th>操作</th>
    </tr>
    <tr>
        <td>1</td>
        <td>手机数码</td>
        <td>手机数码类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>2</td>
        <td>电脑办公</td>
        <td>电脑办公类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>3</td>
        <td>鞋靴箱包</td>
        <td>鞋靴箱包类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
    <tr>
        <td>4</td>
        <td>家居饰品</td>
        <td>家居饰品类商品</td>
        <td><a href="">修改</a>|<a href="">删除</a></td>
    </tr>
</table>
</body>
</html>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hyhcloud

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

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

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

打赏作者

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

抵扣说明:

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

余额充值