一. 知识点回顾

  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动态创建数据的更多相关文章

  1. JavaScript DOM动态创建(声明)Object元素

    http://www.cnblogs.com/GuominQiu/archive/2011/04/01/2002783.html 一文提及“等整个页面加载完毕后,根据用户所选的阅读机类型,再用Java ...

  2. Dom 获取、Dom动态创建节点

    一.Dom获取 1.全称:Document     Object     Model 文档对象模型 2.我们常用的节点类型 元素(标签)节点.文本节点.属性节点(也就是标签里的属性). 3.docum ...

  3. Javascript:DOM动态创建元素实例应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. [JS前端开发] js/jquery控制页面动态载入数据 滑动滚动栏自己主动载入事件

    本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...

  5. JavaScript dom 动态创建标记

    此前的大多数DOM都是用来查找元素,getElementById和getElementsByTagName都可以方便快捷的找到文档中的某个或者某些特定的元素节点,这些元素随后可以用诸如setAttri ...

  6. 使用DOM动态创建标签

    本文是参考<javascript Dom 编程艺术>第八章的内容所写,用到的知识点,就是关于创建平稳的web页面. 使用DOM方法: getElementById() getElement ...

  7. js入门之DOM

    一.理解Web API Web API Application Programming Interface 应用程序编程接口, 是一个预先定义好的函数和方法 目的是提供应用程序与开发人员基于某软件或硬 ...

  8. js中几种动态创建元素并设置文本内容的比较,及性能测试。

    内容 1 appendChild (都兼容) 2.insertAdjacentHTML (都兼容) 3.innerHTML (都兼容) 4.createDocumentFragment (都兼容) 动 ...

  9. 【 D3.js 入门系列 — 2 】 绑定数据和选择元素

    1. 如何绑定数据 D3 有一个很独特的功能:能将数据绑定到 DOM 上,也就是绑定到文档上.这么说可能不好理解,例如网页中有段落元素<p>,我们可以将整数 5 与 <p>绑定 ...

随机推荐

  1. ISO/IEC 9899:2011 条款6.8.4——选择语句

    6.8.4 选择语句 语法 1.selection-statement: if    (    expression    )    statement if    (    expression   ...

  2. flutter的 图片组件基本使用

    import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends Statele ...

  3. 转 ORA-16191 "Primary log shipping client not logged on standby

    ###sample 0 原因未知: 解决办法,重建密码文件 primary db :alter system set log_archive_dest_state_2=defer sid='*' sc ...

  4. Python和Pygame游戏开发 pdf

    Python和Pygame游戏开发 目录 第1章 安装Python和Pygame 11.1 预备知识 11.2 下载和安装Python 11.3 Windows下的安装说明 11.4 Mac OS X ...

  5. Django中models定义的choices字典使用get_FooName_display()在页面中显示值

    问题 在django的models.py 中,我们定义了一些choices的元组,类似一些字典值,一般都是下拉框或者单多选框,例如 0对应男 1对应女等等 看下例子: class Area(model ...

  6. Flink MysqlSink 简单样例

    在大数据领域中,有很多nosql 的数据库,典型的 hbase,可以实现大数据量下的快速查询,但是关系型数据的地位还是没办法替代.比如上个项目中,计算完的结果数据,还是会输出到关系型数据库当中.Fli ...

  7. WinForm,在另一个线程中更新Form中的数据(转)

    Form本身有线程,但对于一些耗时的操作,我们不希望在Form的线程中进行,因为会导致Form线程阻塞,产生假死的现象. 其他线程中操作Form中的控件,总出现“线程间操作无效: 从不是创建控件的线程 ...

  8. 基于jsplumb插件制作可拖拽、保存流程图、重绘保存后的流程图总结

    1.重点参考博文 https://blog.csdn.net/j_bean/article/details/78092647 2.关键点总结 1)实现可视区域图形画满后,拖动整个画布的效果 a.最好不 ...

  9. 微服务Consul系列之集群搭建

    在上一篇中讲解了Consul的安装.部署.基本的使用,使得大家有一个基本的了解,本节开始重点Consul集群搭建,官方推荐3-5台Server,因为在异常处理中,如果出现Leader挂了,只要有超过一 ...

  10. 关于Form、ModelForm的一些操作(持续更新)

    1.前端循环:后端传到前端的form是可以循环的,以此获得想要展示的元素 <form method="post" class="form-horizontal&qu ...