JS document.createElement 动态添加表

本文介绍了一种使用JavaScript动态创建HTML表格的方法。通过简单的代码示例展示了如何逐行逐列地添加单元格,并设置其样式及内容。该方法遵循DHTML的层次结构,适用于网页动态内容更新。

 

JS动态生成DIV比较简单,下面是表的示例

 

<html>

<head>

<title>简单示例</title>

<script>

    function start() {

        // 获取body

        var body = document.getElementsByTagName("body")[0];

 

        // 创建表节点 和tbody节点

        var tbl     = document.createElement("table");

        var tblBody = document.createElement("tbody");

 

 

        for (var j = 0; j < 4; j++) {

            // 添加行tr

            var row = document.createElement("tr");

 

            for (var i = 0; i < 2; i++) {

                // 添加列td

                var cell = document.createElement("td");

                cell.style.border=0;

                cell.style.cellspacing="0";

                cell.style.cellpadding="0";

                var cellText = document.createTextNode("cell is row "+j+", column "+i);

                cell.appendChild(cellText);

                row.appendChild(cell);

            }

 

            // 增加到tbody

            tblBody.appendChild(row);

        }

 

        // 把tbody放入table中

        tbl.appendChild(tblBody);

        // table put to body

        body.appendChild(tbl);

 

set atrribute

        tbl.setAttribute("border", "0");

    }

</script>

</head>

<body onload="start()">

</body>

</html>

 

符合DHTMl的层次结构

 

 

<think>我们正在处理一个关于JavaScript中document.createElement方法的详细教程请求。根据系统指令,我们需要使用正确的LaTeX格式,生成相关问题,并保持回答结构清晰。同时,我们需要参考提供的引用内容,但注意这些引用内容可能并不直接与用户需求相关,因此我们主要依靠自己的知识库来提供准确信息。 用户请求:详细教程关于JavaScript中的document.createElement方法。 回答结构: 1. 方法介绍:解释document.createElement()是什么,它的作用。 2. 语法:展示方法的语法。 3. 参数说明:解释参数。 4. 返回值:说明返回什么。 5. 使用步骤:如何正确使用(通常需要与appendChild或insertBefore等方法配合)。 6. 示例:提供几个示例代码,从简单到复杂。 7. 注意事项:包括常见错误和性能考虑(参考引用中提到的性能问题)。 8. 相关方法:简要介绍appendChild和insertBefore。 根据引用内容,我们注意到: [^1]:提到了使用createElement创建1000个元素的性能测试(耗时)。 [^2]:解释了createElement需要与appendChild或insertBefore联合使用。 [^3]:展示了一个错误用法,即直接赋值createEle = document.createElement,然后调用createEle('a'),这会导致错误,因为丢失了上下文。 [^4]:给出了一个使用insertBefore的例子。 [^5]:是一个GIS教程的广告,与主题无关。 因此,我们在注意事项中需要提到: - 不要直接引用document.createElement而不保留上下文(即不能直接赋值给变量后调用,因为它是document的方法,需要绑定document对象)。 - 性能问题:大量创建元素并添加到文档中会导致重排和重绘,影响性能(如引用1中所示,创建1000个元素并追加,耗时可通过日期差计算)。 生成相关问题: 1. document.createElement和innerHTML创建元素有什么区别? 2. 如何提高使用document.createElement创建大量元素的性能? 3. 除了appendChild和insertBefore,还有哪些方法可以将创建的元素添加到文档中? 现在,我们开始组织回答。</think>### JavaScript `document.createElement()` 方法详细教程 `document.createElement()` 是 JavaScript DOM 操作的核心方法,用于动态创建新的 HTML 元素。创建的元素需配合其他方法(如 `appendChild()`)才能插入文档中[^2]。 #### 一、基础语法 ```javascript const element = document.createElement(tagName); ``` - **`tagName`**:字符串参数,指定要创建的 HTML 标签名(如 `'div'`、`'a'`) - **返回值**:新创建的 DOM 元素节点(尚未加入文档) #### 二、基本使用步骤 1. **创建元素** ```javascript const newDiv = document.createElement('div'); ``` 2. **设置属性/样式** ```javascript newDiv.id = 'myDiv'; newDiv.className = 'box'; newDiv.style.width = '100px'; newDiv.style.height = '100px'; newDiv.style.backgroundColor = 'blue'; ``` 3. **添加内容** ```javascript newDiv.textContent = '动态创建的元素'; // 或 newDiv.innerHTML = '<span>带HTML的内容</span>'; ``` 4. **插入文档** ```javascript // 追加到 body 末尾 document.body.appendChild(newDiv); // 插入特定位置(在 existingElement 前插入) const container = document.getElementById('container'); const existingElement = document.getElementById('child'); container.insertBefore(newDiv, existingElement); // [^4] ``` #### 三、完整示例 ```html <button onclick="createElementDemo()">创建元素</button> <div id="targetContainer"></div> <script> function createElementDemo() { // 1. 创建元素 const newLink = document.createElement('a'); // 2. 设置属性和内容 newLink.href = 'https://example.com'; newLink.textContent = '点击访问示例网站'; newLink.style.display = 'block'; newLink.style.margin = '10px'; // 3. 插入到容器中 const container = document.getElementById('targetContainer'); container.appendChild(newLink); } </script> ``` #### 四、常见错误及解决 1. **未插入文档** 创建的元素必须显式插入文档,否则不会显示[^2]。 2. **上下文丢失**(常见于模块化开发) ```javascript // 错误!createElement 需要 document 上下文 const createEle = document.createElement; createEle('div'); // TypeError [^3] // 正确:保持 document 上下文 const createElement = (tag) => document.createElement(tag); ``` 3. **性能优化** 批量操作时使用文档片段减少重排: ```javascript const fragment = document.createDocumentFragment(); for (let i = 0; i < 1000; i++) { const div = document.createElement('div'); fragment.appendChild(div); } document.body.appendChild(fragment); // 仅触发一次重排[^1] ``` #### 五、与其他创建方式的对比 | 方法 | 特点 | |---------------------|----------------------------------------------------------------------| | `createElement()` | 精准控制元素属性,支持事件绑定,符合 DOM 标准 | | `innerHTML` | 适合批量 HTML 字符串插入,但会破坏现有元素的事件绑定 | | `cloneNode()` | 复制现有元素(参数 `true` 示深拷贝),适合创建相似结构 | #### 六、适用场景 1. 动态添加/删除字段 2. 无限滚动列项加载 3. 模态框/弹窗组件生成 4. 可视化拖拽元素创建 > **性能注意**:频繁操作 DOM 会导致重排(Reflow)和重绘(Repaint)。在循环中创建元素时,优先使用文档片段(DocumentFragment)[^1],或使用 `requestAnimationFrame` 分批插入。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值