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>
二. 节点介绍及应用
- 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>
优化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>
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>
四. 常用的元素操作方法
- 创建元素操作方法
- createElement()
- appendChild()
- removeChild()
- insertBefor() 把元素插入到页面的指定位置
- replaceChild() 把当前元素标签进行替换
js入门之DOM动态创建数据的更多相关文章
- JavaScript DOM动态创建(声明)Object元素
http://www.cnblogs.com/GuominQiu/archive/2011/04/01/2002783.html 一文提及“等整个页面加载完毕后,根据用户所选的阅读机类型,再用Java ...
- Dom 获取、Dom动态创建节点
一.Dom获取 1.全称:Document Object Model 文档对象模型 2.我们常用的节点类型 元素(标签)节点.文本节点.属性节点(也就是标签里的属性). 3.docum ...
- Javascript:DOM动态创建元素实例应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [JS前端开发] js/jquery控制页面动态载入数据 滑动滚动栏自己主动载入事件
本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...
- JavaScript dom 动态创建标记
此前的大多数DOM都是用来查找元素,getElementById和getElementsByTagName都可以方便快捷的找到文档中的某个或者某些特定的元素节点,这些元素随后可以用诸如setAttri ...
- 使用DOM动态创建标签
本文是参考<javascript Dom 编程艺术>第八章的内容所写,用到的知识点,就是关于创建平稳的web页面. 使用DOM方法: getElementById() getElement ...
- js入门之DOM
一.理解Web API Web API Application Programming Interface 应用程序编程接口, 是一个预先定义好的函数和方法 目的是提供应用程序与开发人员基于某软件或硬 ...
- js中几种动态创建元素并设置文本内容的比较,及性能测试。
内容 1 appendChild (都兼容) 2.insertAdjacentHTML (都兼容) 3.innerHTML (都兼容) 4.createDocumentFragment (都兼容) 动 ...
- 【 D3.js 入门系列 — 2 】 绑定数据和选择元素
1. 如何绑定数据 D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上.这么说可能不好理解,例如网页中有段落元素<p>,我们可以将整数 5 与 <p>绑定 ...
随机推荐
- Java回调机制在RPC框架中的应用示例
完整源码: https://gitee.com/shiyanjun/x-callback-demo 应用场景描述: 服务提供者在项目启动时,创建并启动一个TCP服务器,然后将自己提供的所有服务注册到注 ...
- WPF窗体自适应分辨率
使用WPF创建一个窗体(Window)时,如果设置了固定的高度(Height)和宽度(Width),一旦用户的电脑分辨率过低,就会使得窗体及其中的内容无法完整地显示出来.要解决这个这个问题,有以下几个 ...
- 【DataBase】Hsqldb的简单使用
介绍 HSQLDB是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的.具有Server模式,每个程序需要不同的命令来运行. HyperSQL ...
- 123457123456#0#----com.DoraGame.ErTongFanPai97--前拼后广--记忆翻牌-doraX
com.DoraGame.ErTongFanPai97--前拼后广--记忆翻牌-doraX
- 【sqlalchemy】
https://www.cnblogs.com/ccorz/p/5711955.html
- C# sqlsugar依赖引用报错的问题解决
English Message : You need to refer to MySql.Data.dll↵Chinese Message : 需要引用MySql.Data.dll,请在Nuget安装 ...
- 1. Arduino对第三方开发板的支持
Arduino对第三方开发板也有支持接口,需要手动添加,我们以STM32系列为例,说明添加过程. 目前st的官方提供的一系列板子都支持Arduino,可能是Arduino-IDE更新太慢,目前版本没有 ...
- 【面试题】如何删除 ArrayList 中奇数位置的元素?
如何删除 ArrayList 中奇数位置的元素? 面试题携程 import java.util.ArrayList; import java.util.Iterator; import java.ut ...
- [SQL] - 报表查询效率优化
背景 系统将数据对象JSON序列化后存放到数据库字段中.Report 模块需要获取实时数据对象数值,当前在SQL中进行数值判断的耗时长,效率低. 分析 当前执行效率低主要是程序结构设计的不合理. SQ ...
- Keras中图像维度介绍
报错问题: ValueError: Negative dimension size caused by subtracting 5 from 1 for 'conv2d_1/convolution' ...