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>绑定 ...
随机推荐
- shell编程系列9--文本处理三剑客之sed概述及常见用法总结
shell编程系列9--文本处理三剑客之sed概述及常见用法总结 sed的工作模式:对文本的行数据一行行处理,如下图 sed(stream editor),是流编辑器,依据特定的匹配模式,对文本逐行匹 ...
- 利用 Postman 中 Tests 断言校验返回结果
前言 Postman目前是一款很火的接口测试工具,它有着非常强大结果判断能力.为什么说强大呢,因为Postman有自带的校验脚本,根本不需要我们去学习JS脚本语言,对于代码能力为0的各位测试小伙伴来说 ...
- Unity 3D网络游戏实战 pdf
Unity 3D网络游戏实战(全) 目录: 掌握Unity3D基本元素 1.1 简单的游戏 1.1.1在场景中创建一个立方体 1.1.2编写可以使立方体运动的程序 1.1.3测试游戏1.1.4总结1. ...
- PAT 甲级 1071 Speech Patterns (25 分)(map)
1071 Speech Patterns (25 分) People often have a preference among synonyms of the same word. For ex ...
- replicationController 使用
[root@lab2 nginx-harbor]# cat http-test.yaml apiVersion: v1 kind: ReplicationController metadata: na ...
- 【ARTS】01_45_左耳听风-201900916~201900922
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- jstat介绍
命令可用选项 ➜ ~ jstat -options -class -compiler -gc -gccapacity -gccause -gcmetacapacity -gcnew -gcnewcap ...
- python2:输出百分比
pass_num=80execute_num=90pass_rate = "%.2f%%" % (float(pass_num)/float(executed_num)*100)p ...
- Swoole练习 Web
WEB 服务端代码 $http = new swoole_http_server("0.0.0.0", 9501); $http->on('request', functio ...
- Nginx负载均衡总结2
如果要支持健康检查需要开启health_check(好吧,这个是nginx plus版本才有的功能,plus是付费版) 还有一点,Windows的nginx不支持udp等协议,所以有一些测试还必须用l ...