zoukankan      html  css  js  c++  java
  • js入门之DOM动态创建数据

    一. 知识点回顾

      1. DOM结构

    nodeName: '' 标签名
    nodeType: '' 类型  1元素节点  2属性节点  3文本节点
    nodeValue: '' 如果是元素节点 nodeValue的值始终是null;

      2. 节点分类

    节点的分类
    属性节点 元素节点 文本节点 注释节点
    nodeType 为1 时 就是元素节点

      案例: 查找子节点

    <script>
            var box = document.getElementById("box");
            console.log(box.childNodes);
            for (var i = 0; i < box.childNodes.length; i++) {
                var node = box.childNodes[i];
                if (node.nodeType === 1) {
                    console.log(node);
                }
            }
    </script>
    View Code

    二. 节点介绍及应用

    parentNode  查找父节点 (父节点只有一个)
    childNodes  查找子节点 (子节点有多个)
    hasChildNodes 判断是否有子节点
    children 获取所有的子元素
    firstChild 获取第一个子节点
    lastChild 获取最后一个子节点
    firstElementChild 获取第一个子元素
    lastElementChild 获取最后一个子元素  有兼容性问题
    nextSibling 获取下一个兄弟节点
    previousSibling 获取上一个兄弟节点
    nextElementSibling 获取下一个兄弟元素
    previousElementSibling 获取上一个兄弟元素

    三. 动态创建元素三种方式

    1. document.write() 问题 会把之前的整个页面覆盖掉, 不能在事件中使用

        <input type="button" value="按钮" id="btn">
        <script>
            var btn = document.getElementById('btn');
            btn.onclick = function () {
                document.write('Hello <p>World</p>')
            }
            
        </script>

    2. element.innerHTML 在这里会有效率问题 因为涉及到了重绘页面

        <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <input type="button" value="按钮" id="btn">
        <div id="box"></div>
        <script>
            var datas = ['西施','貂蝉','凤姐','芙蓉姐姐'];
            var btn = document.getElementById('btn');
            btn.onclick = function () {
                var box = document.getElementById('box');
                box.innerHTML = '<ul>';
                    for (var i = 0; i < datas.length; i++) {
                        var data = datas[i];
                        box.innerHTML += '<li>' + data + '</li>';
                    }
                box.innerHTML += '</ul>'
            }
        </script>
    </body>
    </html>

    优化1

    <input type="button" value="按钮" id="btn">
        <div id="box"></div>
        <script>
            var datas = ['西施','貂蝉','凤姐','芙蓉姐姐'];
            var btn = document.getElementById('btn');
            btn.onclick = function () {
                var box = document.getElementById('box');
                var html = '<ul>';
                    for (var i = 0; i < datas.length; i++) {
                        var data = datas[i];
                        html += '<li>' + data + '</li>';
                    }
                html += '</ul>';
                box.innerHTML = html;
            }
        </script>
    View Code

    优化2

    <input type="button" value="按钮" id="btn">
        <div id="box"></div>
        <script>
            var datas = ['西施','貂蝉','凤姐','芙蓉姐姐'];
            var btn = document.getElementById('btn');
            btn.onclick = function () {
                var box = document.getElementById('box');
                var array = [];
                array.push('<ul>');
                    for (var i = 0; i < datas.length; i++) {
                        var data = datas[i];
                        array.push('<li>' + data + '</li>');
                    }
                array.push('</ul>');
                box.innerHTML = array.join('');
            }
        </script>
    View Code

    3. document.creatElement() 推荐使用

    <div id="box"></div>
        <script>
            // 在内存中创建一个DOM对象
            var p = document.createElement('p');
            // 设置对象的属性
            p.innerText = 'hello';
            p.style.color = 'red';
            // 把p元素 放到DOM树上
            var box = document.getElementById('box');
            box.appendChild(p);
        </script>

    案例 动态创建表格

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #box table {
                border-collapse: collapse;
            }
        </style>
    </head>
    <body>
        <div id='box'></div>
        <script src="common.js"></script>
        <script>
            var headDatas = ['姓名','科目','成绩','操作'];
        var datas = [
          {name: 'zs', subject: '语文', score: 90},
          {name: 'ls', subject: '数学', score: 80},
          {name: 'ww', subject: '英语', score: 99},
          {name: 'zl', subject: '英语', score: 100},
          {name: 'xs', subject: '英语', score: 60},
          {name: 'dc', subject: '英语', score: 70}
        ];
                 
            
            // 创建table元素
            
            var table = document.createElement('table');
            my$('box').appendChild(table);
            table.border = '1px';
            table.width = '400px';
            
            // 创建表头
            var thead = document.createElement('thead');
            table.appendChild(thead);
            var tr = document.createElement('tr');
            thead.appendChild(tr);
            tr.style.height = '40px';
            tr.style.backgroundColor = 'lightgray';
    
            for (var i = 0; i < headDatas.length; i++) {
                var th = document.createElement('th');
                tr.appendChild(th);
    
                setInnerText(th, headDatas[i]);
            }
            // 创建数据行
    
            var tbody = document.createElement('tbody');
            table.appendChild(tbody);
            tbody.style.textAlign = 'center';
            for (var i = 0; i < datas.length; i++) {
                var data = datas[i];
                var tr = document.createElement('tr');
                tbody.appendChild(tr);
                
                for (var key in data) {
                    var td = document.createElement('td');
                    tr.appendChild(td);
                    setInnerText(td, data[key]);
    
                }
                // 生成删除的对应列
                var td = document.createElement('td');
                tr.appendChild(td);
                var link = document.createElement('a');
                td.appendChild(link);
                link.href = 'javascript:void(0)';
                setInnerText(link, '删除')
    
                link.onclick = linkDelete;
    
            }
            function linkDelete() {
                var tr = this.parentNode.parentNode;
                tbody.removeChild(tr); 
                return false;
            }
        </script>
    </body>
    </html>
    View Code

    四. 常用的元素操作方法

    创建元素操作方法
    createElement()
    appendChild()
    removeChild()
    
    insertBefor() 把元素插入到页面的指定位置
    replaceChild() 把当前元素标签进行替换
  • 相关阅读:
    断棍构造过程-波利亚翁方案-中餐馆过程
    狄利克雷过程
    狄利克雷分布
    共轭先验(conjugate prior)
    镜像与文件系统
    Oracle-04
    Oracle-02
    Oracle-01
    认识数据库
    c:forEach的作用
  • 原文地址:https://www.cnblogs.com/guniang/p/12012751.html
Copyright © 2011-2022 走看看