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>绑定 ...
随机推荐
- Vscode 调试 Flutter 项目
1.Vscode 中打开 flutter 项目进行开发 2.运行 Flutter 项目 flutter run r 键:点击后热加载,也就算是重新加载吧. p 键:显示网格,这个可以很好的掌握布局情况 ...
- Flutter 介绍、运行环境
Flutter 是谷歌公司开发的一款开源.免费的移动 UI 框架,可以让我们快速的在 Android 和iOS 上构建高质量 App.它最大的特点就是跨平台.以及高性能. Flutter 基于谷歌的 ...
- Python之BeautifulSoup的使用示例
import requests from bs4 import BeautifulSoup url = 'http://pm25.in/'+city_pinyin r = requests.get(u ...
- setInterval调用ajax回调函数不执行的问题
setInterval调用ajax回调函数不执行 1.首先检查你的setInterval()函数写法是否正确 参考写法 // 检查是否支付成功 var isPayRequest=false; var ...
- 【Java】分布式自增ID算法---雪花算法 (snowflake,Java版)
一般情况,实现全局唯一ID,有三种方案,分别是通过中间件方式.UUID.雪花算法. 方案一,通过中间件方式,可以是把数据库或者redis缓存作为媒介,从中间件获取ID.这种呢,优点是可以体现全局的递增 ...
- Mac或者linux系统自动加载python tab补全功能
因为mac OS属于类unix系统,所以基本和linux系统使用相差不大,只是用户登陆时自动执行环境变量文件的区别 mac系统: ShanedeMBP:login_api shane$ vi ~/.b ...
- Flink 在IDEA执行时的webui
不过Flink IDEA中执行的webui 需要 flink-runtime-web 包的支持 pom 如下: <dependency> <groupId>org.apache ...
- HDU3853 LOOPS 期望DP基础题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 题目大意(只是大意,名字什么的可能和原题描述不一样~): 爱丽丝与华容道 题目描述 爱丽丝是一个 ...
- python虚拟环境的配置: virtualenv 和 virtualenvwrapper-win 的用法
版本:python37, virtualenv==16.7.8, virtualenvwrapper-win==1.2.5 pip37 install virtualenv 安装支持虚拟环境的包,注意 ...
- 微信公众号使用vue,安卓端点击按钮404,ios访问正常问题
情景:微信公众号使用vue开发的单页面,在安卓端点击按钮访问显示404,ios访问正常问题,能正常显示. 解决:将微信公众号菜单按钮设置的路径中把WWW去掉后,安卓.ios都能正常访问. 问题路径ww ...