博客列表 >DOM操作两个案例(Tolist留言删除 模拟数组数据填充到表格中)2019年1月17日22时08分

DOM操作两个案例(Tolist留言删除 模拟数组数据填充到表格中)2019年1月17日22时08分

小明的博客
小明的博客原创
2019年01月18日 18:23:35673浏览

Dom中的节点都是对象,通过Tolist留言删除 、模拟数组数据填充到表格中俩个小案例,熟悉DOM操作,包括准确找到节点,父节点添加子节点,删除节点,创建节点,给节点添加文本子节点内容,获取子节点数,还有数组遍历方法forEach。

一、Tolist留言删除

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">    
    <title>Tolist添加和删除功能</title>
</head>
<body>
    <!-- 留言板实现 添加删除功能 -->
    <h3>留言板</h3>
    <input type="text">
    <ul></ul>

    <!-- 通过js实现 -->
    <script>
        // 获取input节点
        var comment = document.querySelector('input');
        //获取节点ul
        var ul = document.getElementsByTagName('ul')[0];
        //自动获得焦点
        comment.focus();
        //给input添加按键按下的事件
        comment.onkeydown=function (event) {
            // 判断是不是按下的回车
            // 添加删除功能  给li里面添加点击事件 然后调用del函数
            if (event.keyCode === 13) {
                // 创建一个li节点
                var li = document.createElement('li');
                // li节点下的文本内容就是input里的value属性值
                li.innerHTML = comment.value + "<a href='javascript:;' onclick='del(this)'>删除</a>";
                // 判断如果ul下为空li是第一条 那么就添加在ul下面否则就添加到li里的第一条
                if (ul.childElementCount === 0) {
                    // 将li节点添加到ul下面
                    ul.appendChild(li);
                    // 留言成功后把input清空
                    comment.value = "";   
                } else {
                    // 获取到目前子节点的第一条
                    var first = ul.firstElementChild;
                    // 添加到现有子节点的前面
                    ul.insertBefore(li, first);
                }
                
            }
        }
        // 删除函数
        function del(ele) {
            // 先进性确认  确认返回true
            if (confirm('是否删除')) {
                // 要删除li 先调用li节点
                var li = ele.parentNode;
                //li采用 removechild要先找到上面的父节点在删除自己
                li.parentNode.removeChild(li);
            }
            // 返回false初始化
            return false;
            
        }
       
    </script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例



二、模拟数组数据填充到表格中

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js动态获取数据填入表格</title>
    <style>
        table,th,td{
            border: 1px solid #666;
        }
        table {
            width: 500px;
            text-align: center;
            border-collapse: collapse;
        }
        table caption {
            font-size: 1.2rem;
            margin-bottom: 15px;
        }
        /* 这里必须在nth-of-type(1)前添加父元素,否则thead,tbody中的第一行都会生效 */
        thead tr:nth-of-type(1) {
            background-color: lightblue;
        }    
    </style>
</head>
<body>
    <table id="cart2">
        <caption>购物车2</caption>
        <thead>
            <tr>
                <th>编号</th>
                <th>品名</th>
                <th>数量</th>
                <th>单价</th>
            </tr>
        </thead>   
        <tbody></tbody>
    </table>
    <hr>
    <table id="cart3">
            <caption>购物车2</caption>
            <thead>
                <tr>
                    <th>编号</th>
                    <th>品名</th>
                    <th>数量</th>
                    <th>单价</th>
                </tr>
            </thead>   
            <tbody></tbody>
        </table>
    <!-- js添加数据 -->
    <script>
        // 模拟一组数组数据
        var date = [
            {id: 1, name: '牛奶', count: 3, price: 50},
            {id: 2, name: '苹果', count: 10, price: 80},
            {id: 3, name: '衣服', count: 2, price: 600}
        ];
        // 获取cart2
        var cart2 = document.getElementById('cart2');
        // 获取到tbody
        var tbody = cart2.children[2];
       
        // 数组遍历数据方法
        date.forEach(function (value) {
            // 创建tr
            var tr = document.createElement('tr');
            // 将数据添加到tr里面
            tr.innerHTML = '<td>'+value.id+'</td>';
            tr.innerHTML += '<td>'+value.name+'</td>';
            tr.innerHTML += '<td>'+value.count+'</td>';
            tr.innerHTML += '<td>'+value.price+'</td>';
            // tbody添加子节点
            tbody.appendChild(tr);
        });
        

        // 用另外一种方法
        // 获取cart3
        var cart3 = document.getElementById('cart3');
        // 获取到tbody
        var tbody = cart3.children[2];
        // 用for循环遍历出数组下的三个对象值
        for (var i=0;i<date.length;i++) {
            // 通过循环分别创建一次相对应的tr
            var tr = document.createElement('tr');
            // 获取每个对象里的键组成新的数组,遍历这个数组通过键获取键值然后给到tr下
            Object.keys(date[i]).forEach(function (key) {
                tr.innerHTML += '<td>'+date[i][key]+'</td>';
                // tbody添加子节点
                tbody.appendChild(tr);
            });
        }
    </script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

1、操作DOM的前提就是要找准节点,这里可以用标签(getElementsByTagName('a')[0])、ID(getElementById(‘a’))、class(getElementsByClassName('a')[0])、表单中的name(getElementsByName('a'))以上都是可以动态实时反映变化;css获取时静态的(querySelector('h3')只返回第一个值,querySelectorAll(‘a’)【0】)

2、留言板功能实现主要时要找到ul节点然后创建li节点,通过将input的value值传递给li的子文本节点。删除功能中需要注意的是,但删除一个节点是可以通过parentNode找的父节点在删除子节点removeChild();功能——最后的留言在最前面的实现是,先判断如果ul下的节点数为0那么就用appendChild插入子节点,如果不为0那么就在第一个子元素(firstElement)前添加insertBefore.

3、把数组数据用js填入表格功能,首先要知道table自动生成tbody,要先找到table,然后他的第三个子元素tbody,然后是tbody下的tr;数组里面实际上是对象,通过forEsch()方法遍历出来,然后调用里面的属性值得相应的数据,在填充到tr然后在添加到tbody

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议