【JavaScript-节点操作】如何进行节点的删除以及动态表格的创建,了解三种动态元素的创建区别

简介: 【JavaScript-节点操作】如何进行节点的删除以及动态表格的创建,了解三种动态元素的创建区别

1.如何删除节点


使用node.removeChild()方法从DOM中删除一个子节点,返回删除的节点。


1.1删除奥特曼案例

<body>
    <button>删除</button>
    <ul>
        <li>迪迦</li>
        <li>艾迪</li>
        <li>高斯</li>
    </ul>
    <script>
        // 获取元素
        var ul = document.querySelector('ul');
        // 点击按钮依次删除奥特曼
        var but = document.querySelector('button');
        but.onclick = function () {
            if (ul.children.length == 0) {
                this.disabled = true;
                alert('全都删无了!我还怎么相信光啊!')
            } else {
                ul.removeChild(ul.children[0]);
            }
        }
    </script>
</body><body>
    <button>删除</button>
    <ul>
        <li>迪迦</li>
        <li>艾迪</li>
        <li>高斯</li>
    </ul>
    <script>
        // 获取元素
        var ul = document.querySelector('ul');
        // 点击按钮依次删除奥特曼
        var but = document.querySelector('button');
        but.onclick = function () {
            if (ul.children.length == 0) {
                this.disabled = true;
                alert('全都删无了!我还怎么相信光啊!')
            } else {
                ul.removeChild(ul.children[0]);
            }
        }
    </script>
</body>



1.2删除留言案例

在上篇文章中也实现了留言板的功能,这次就把功能完善一下,删除不当留言

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        li {
            list-style: none;
            width: 200px;
            margin-top: 10px;
            background-color: rgb(176, 231, 250);
        }
        textarea {
            resize: none;
            width: 300px;
            height: 150px;
            border: 1px solid blue;
        }
        li a {
            float: right;
        }
    </style>
</head>
<body>
    <textarea name="" id="" cols="30" rows="10"></textarea>
    <button>发布</button>
    <ul>
    </ul>
    <script>
        // 获取元素
        var but = document.querySelector('button');
        var text = document.querySelector('textarea');
        var ul = document.querySelector('ul');
        // 注册事件
        but.onclick = function () {
            if (text.value == '') {
                alert('您还没有输入呢?')
                return false;
            }
            else {
                // 1.创建元素
                var li = document.createElement('li');
                li.innerHTML = text.value + "<a href='javascrpit:;'>删除</a>";
                // 2.添加元素
                // ul.appendChild(li);
                ul.insertBefore(li, ul.children[0]);
                // 点击发布后使文本域内的value为空
                text.value = '';
                // 3.删除留言
                var as = document.querySelectorAll('a');
                for (var i = 0; i < as.length; i++) {
                    as[i].onclick = function () {
                        // 删除的是li所以也就是删除的是a的父亲li,这里的li就是 this.parentNode
                        ul.removeChild(this.parentNode);
                    }
                }
            }
        }
    </script>
</body>
</html>



2.复制节点


node. cloneNode ()方法返回调用该方法的节点的一个副本。也称为克隆节点或者是拷贝节点

node. cloneNode()括号为空或者里面是false浅拷贝只复制标签不复制里面的内容 node . cloneNode(true)括号为true深拷贝复制标签复制里面的内容



3.动态表格的创建


3.1思路导向

①使用js动态生成。先进行自定义数据,数据采取对象形式存储。


②所有的数据都是放到tbody里面的行里面。


③因为行很多,我们需要循环创建多个行(对应多少人)


④每个行里面又有很多单元格(对应里面的数据) , 继续使用循环创建多个单元格,并且把数据存入里面(双重for循环)


⑤最后一列单元格是删除,需要单独创建单元格。


注:<tbody> 标签表格主体(正文)。该标签用于组合 HTML 表格的主体内容。tbody 元素应该与 thead 和 tfoot 元素结合起来使用。


3.2相关代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        a {
            text-decoration: none;
            color: brown;
        }
        table {
            width: 500px;
            height: 100px;
            border-collapse: collapse;
            text-align: center;
        }
        thead th {
            width: 100px;
            border: 1px solid black;
        }
        thead tr {
            height: 40px;
            background-color: #ccc;
        }
        tr td {
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>班级</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
    <script>
        var datas = [
            {
                name: '山鱼',
                age: 12,
                sex: '男',
                class: '9-2',
            },
            {
                name: '山猪',
                age: 11,
                sex: '男',
                class: '9-2',
            },
            {
                name: '山猫',
                age: 10,
                sex: '男',
                class: '9-2',
            }
        ];
        var tbody = document.querySelector('tbody');
        for (var i = 0; i < datas.length; i++) {
            var tr = document.createElement('tr');
            tbody.appendChild(tr);
            for (var k in datas[i]) {
                // 创建单元格
                var td = document.createElement('td');
                td.innerHTML = datas[i][k];
                tr.appendChild(td);
            }
            // for(var k in obj) {
            // k得到的是属性名
            // obj[k]得到是属性值
            // 所以这里的属性值就是 datas[i][k]
            // 创建操作行单元格
            var td = document.createElement('td');
            td.innerHTML = "<a href='javascript:;'>移除</a>"
            tr.appendChild(td);
        }
        // 点击'删除',把tr删除
        var as = document.querySelectorAll('a');
        for (var i = 0; i < as.length; i++) {
            as[i].onclick = function () {
                tbody.removeChild(this.parentNode.parentNode);
            }
        }
    </script>
</body>
</html>


3.3最终结果


4.三种动态元素创建区别


document.write ()


document.write是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘element.innerHTM


是将内容写入某个DOM节点,不会导致页面全部重绘 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接) , 结构稍微复杂


document.createElement ()


创建多个元素效率稍低- 点点,但是结构更清晰


总的来说,innerHTML的效率要比document.createElement ()高

目录
相关文章
|
1月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
1月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
29 1
|
1月前
|
设计模式 JavaScript 前端开发
js中new和object.creat区别
【10月更文挑战第29天】`new` 关键字和 `Object.create()` 方法在创建对象的方式、原型链继承、属性初始化以及适用场景等方面都存在差异。在实际开发中,需要根据具体的需求和设计模式来选择合适的方法来创建对象。
|
1月前
|
JavaScript 前端开发 开发者
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
|
2月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
118 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
3月前
|
存储 前端开发 JavaScript
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
本文介绍了JavaScript变量的声明和使用、标识符的命名规则、如何获取和操作HTML元素,以及JavaScript的鼠标事件处理,通过示例代码展示了这些基础知识点在实际开发中的应用。
51 2
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
|
2月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
86 4
|
2月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
51 4
|
2月前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
23 2
|
2月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
78 1