• 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() 把当前元素标签进行替换
  • 相关阅读:
    error occurred during initialization of vm
    Service Discovery protocol(SDP)
    nRF51822EK_PRO
    Binder
    android samsung note3  device not found
    BLE pairing vs. bonding
    remote link Centos6.6 Horrible Slow
    depmod -a
    start and end call use itelephony and how to pick up a call
    WebService
  • 原文地址:https://www.cnblogs.com/guniang/p/12012751.html
Copyright © 2020-2023  润新知