一. 知识点回顾

  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. Mac 快速进入mysql命令行

    1.终端输入进入bin 目录 cd /usr/local/mysql/bin/ 2.mysql登录,输入密码即可 ./mysql -uroot -p 前提:mysql 服务已启动

  2. mobile crane 1

    void MobileCrane::rotateRope2() { //double r_angle1 = rotateRope + rorate3; //std::cout << &qu ...

  3. 【Git】 Git安装及配置

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台. 本例使用环境:Linux环境(CentOS 7.4 ...

  4. 毫无PS痕迹 你的第一本Photoshop书 完整版

    毫无PS痕迹 你的第一本Photoshop书 目录 <毫无PS痕迹-你的本Photoshop书>全书分为四大部分: 第1.2章讲解色彩和图像的原理与基础知识要点. 第3至11章全面讲解了使 ...

  5. (NSNumber **)value和(NSNumber * __autoreleasing *)value

    今天在看别人开源项目的时候看到这样的代码: 正文从这里开始~~~ 定义如下: /** 评论详情页基础设置 @param BaseSettingBlock 基础设置 */ - (void)setUpCo ...

  6. 【ARTS】01_40_左耳听风-201900812~201900818

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. Mac下安装VirtualBox并在VirtualBox中安装CentOS7

    VirtualBox (百科)VirtualBox 是一款开源虚拟机软件.VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司Sun Microsystem ...

  8. 03.linux入门命令

    1.linux命令的格式 命令 [选项] [参数] eg: ls ls -l ls -l /home 注: a.选项与参数不一定存在 b.选项用 "-" 来指明 c.命令,选项,参 ...

  9. mysql explain中key_len的作用

    mysql explain中key_len的作用key_len越小 索引效果越好 name的字段类型是varchar(20),字符编码是utf8,一个字符占用3个字节,那么key_len应该是 20* ...

  10. 与TypeScript的一场美丽邂逅

    TypeScript(一)前言:当你点开这篇文章时,我相信你已经在很多地方都已经听说过或者见过TypeScript了.但是可能对TypeScript依然有很多问号:TypeScript到底是什么?为什 ...