从零开始学 Web 之 DOM(五)元素的创建
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新......
+------------------------------------------------------------
github:https://github.com/Daotin/Web
微信公众号:Web前端之巅
博客园:http://www.cnblogs.com/lvonve/
CSDN:https://blog.csdn.net/lvonve/
+-----------------------------------------------------------
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!
一、元素的创建
1、元素创建的三种方式
1.1、方式一
document.write("标签代码及内容");
示例:
<body>
<input type="button" value="按钮" id="btn">
<script src="common.js"></script>
<script>
my$("btn").onclick = function() {
document.write("<p>这是一个p标签</p>");
};
// document.write("<p>这是一个p标签</p>");
</script>
</body>
缺陷:如果是在页面加载完毕后,通过这种方式创建元素的话,页面上的除此创建元素之外的所有内容都会被清除。但是在页面加载的时候不会。
1.2、方式二
标签.innerHTML = "标签代码及内容";
示例:
<body>
<script>
<input type="button" value="按钮" id="btn">
<div id="dv"></div>
<script src="common.js"></script>
<script>
my$("btn").onclick = function() {
my$("dv").innerHTML = "lvonve";
};
</script>
</body>
使用 innerHTML,在页面加载完毕后,不会清除页面的内容。
案例:动态创建列表
// 方式一
<body>
<input type="button" value="创建列表" id="btn">
<div id="dv"></div>
<script src="common.js"></script>
<script>
my$("btn").onclick = function() {
my$("dv").innerHTML = "<ul><li>列表一</li><li>列表二</li><li>列表三</li></ul>";
};
</script>
</body>
方式一的方式太过死板,li 标签的个数和内容都是固定的,如果增加 li 的个数需要修改源码。
// 方式二
<body>
<input type="button" value="创建列表" id="btn">
<div id="dv"></div>
<script src="common.js"></script>
<script>
var value = ["列表一", "列表二", "列表三", "列表四", "列表五"];
my$("btn").onclick = function() {
var str = "<ul style='list-style: none;cursor: pointer;'>"
for(var i=0; i<value.length; i++) {
str += "<li>"+value[i]+"</li>";
}
str += "</ul>";
my$("dv").innerHTML = str;
};
</script>
</body>
1.3、方式三
第一步:创建元素,返回值为一个对象元素
document.creatElement("标签的名字");
第二步:将元素追加到父元素中
父元素.appendChild(创建的对象);
示例:
<body>
<input type="button" value="创建列表" id="btn">
<div id="dv"></div>
<script src="common.js"></script>
<script>
my$("btn").onclick = function() {
var pObj = document.createElement("p");
setInnerText(pObj, "这是个p标签"); // 自己封装在 common.js 的方法
my$("dv").appendChild(pObj);
};
</script>
</body>
案例:动态创建列表
<body>
<input type="button" value="创建列表" id="btn">
<div id="dv"></div>
<script src="common.js"></script>
<script>
var values = ["列表1","列表2","列表3","列表4","列表5","列表6"];
my$("btn").onclick = function() {
var ulObj = document.createElement("ul");
my$("dv").appendChild(ulObj);
for(var i=0; i<values.length; i++) {
var liObj = document.createElement("li");
liObj.innerHTML = values[i];
ulObj.appendChild(liObj);
// 鼠标进入事件
liObj.onmouseover = onmouseoverHandle;
// 鼠标离开事件
liObj.onmouseout = onmouseoutHandle;
}
function onmouseoverHandle() {
this.style.backgroundColor = "yellow";
}
function onmouseoutHandle() {
this.style.backgroundColor = "";
}
};
</script>
</body>
当在循环中添加事件的时候,建议不使用匿名函数,因为每个匿名函数都会占用一片内存空间,而使用函数调用的方式,不管循环多少次,都使用一份代码。
案例:动态创建表格
<body>
<input type="button" value="创建列表" id="btn">
<div id="dv"></div>
<script src="common.js"></script>
<script>
var arr = [
{name:"百度", href:"www.baidu.com"},
{name:"谷歌", href:"www.baidu.com"},
{name:"优酷", href:"www.baidu.com"},
{name:"土豆", href:"www.baidu.com"},
{name:"腾讯", href:"www.baidu.com"}
];
my$("btn").onclick = function() {
// 创建table标签,并添加到div中
var tableObj = document.createElement("table");
tableObj.border = "1";
tableObj.cellSpacing = "0";
tableObj.cellPadding = "0";
my$("dv").appendChild(tableObj);
// 创建tr标签,添加到table中
for(var i=0; i<arr.length; i++) {
var trObj = document.createElement("tr");
tableObj.appendChild(trObj);
// 添加第一列
var tdObj1 = document.createElement("td");
tdObj1.innerHTML = arr[i].name;
trObj.appendChild(tdObj1);
// 添加第二列
var tdObj2 = document.createElement("td");
tdObj2.innerHTML = "<a href="+arr[i].href+">"+arr[i].name+"</a>";
trObj.appendChild(tdObj2);
}
};
</script>
</body>
tableObj.border = "1";
不能使用tableObj.style.border = "1px solid red";
这样的话,只有table有边框,而 tr 没边框。所以 js 中,table 标签有自带的 border 属性可以设置边框,注意不需要 px。
2、其他操作元素的方法
<body>
<input type="button" value="添加一个按钮1" id="btn1">
<input type="button" value="添加一个按钮2" id="btn2">
<input type="button" value="删除第一个按钮" id="btn3">
<input type="button" value="删除所有按钮" id="btn4">
<div id="dv"></div>
<script src="common.js"></script>
<script>
var count = 0;
// 往后追加按钮
my$("btn1").onclick = function() {
count++;
var btn = document.createElement("input");
btn.type = "button";
btn.value = "按钮" + count;
my$("dv").appendChild(btn);
};
// 往前追加按钮
my$("btn2").onclick = function() {
count++;
var btn = document.createElement("input");
btn.type = "button";
btn.value = "按钮" + count;
my$("dv").insertBefore(btn, my$("dv").firstElementChild);
};
// 从第一个按钮开始删除一个按钮
my$("btn3").onclick = function() {
my$("dv").removeChild(my$("dv").firstElementChild);
};
// 删除所有按钮
my$("btn4").onclick = function() {
while(my$("dv").firstElementChild) {
my$("dv").removeChild(my$("dv").firstElementChild);
}
};
</script>
</body>
appendChild:追加
insertBefore: 在某个元素前添加
removeChild:删除元素
从零开始学 Web 之 DOM(五)元素的创建的更多相关文章
- 从零开始学 Web 之 DOM(二)对样式的操作,获取元素的方式
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- 从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
- 从零开始学 Web 之 DOM(一)DOM的概念,对标签操作
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- 从零开始学 Web 之 DOM(三)innerText与innerHTML、自定义属性
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- 从零开始学 Web 之 DOM(四)节点
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程.此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注.在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识 ...
- 从零开始学 Web 之 DOM(七)事件冒泡
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +-------------------------------------------------------- ...
- 从零开始学 Web 系列教程
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新…… github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http:/ ...
- 从零开始学 Web 之 jQuery(五)操作元素其他属性,为元素绑定事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 从零开始学 Web 之 Vue.js(五)Vue的动画
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
随机推荐
- 使用安装脚本安装Texlive
介绍 TeX Live 是 TUG (TeX User Group) 维护和发布的 TeX 系统,可说是「官方」的 TeX 系统.网上可找到的教程大多是从镜像安装完整版texlive.镜像发布的周期较 ...
- Linux查看某个进程的线程
线程是现代操作系统上进行并行执行的一个流行的编程方面的抽象概念.当一个程序内有多个线程被叉分出用以执行多个流时,这些线程就会在它们之间共享特定的资源(如,内存地址空间.打开的文件),以使叉分开销最小化 ...
- 微软URLRewriter.dll的url重写在目标框架.Net Framework2.0、4.0和应用程序池经典模式、集成模式下的配置
大家参考几篇园子里面的这篇文章: 文章1:微软URLRewriter.dll的url重写的简单使用 (讲解了使用UrlReWriter.dll的下载.web.config如何在目标框架2.0应用程序池 ...
- CSP里的xss
无CSP保护下的xss 1.直接嵌入型 <img src="192.168.81.137:80/xss.php?a=[cookie]"> 过滤较少时,优先考虑.触发方式 ...
- 让.net core 支持静态文件
想不到默认的.net core竟然不支持静态文件,还需要额外配置中间件来支持 1.Nuget安装 Microsoft.aspnetcore.staticfiles 2.在Startup.cs中使用服 ...
- 《Miracle-House团队》第二次作业:西小餐项目开题报告
一.本团队项目的NABCD评分结果汇总 小组名 N A B C D 总分 Just_Do_IT! 9 7 8 7 9 40 A-Pancers 8 8 8 9 7 40 ymm3 8 9 9 8 9 ...
- 2019.02.12 bzoj3944: Sum(杜教筛)
传送门 题意: 思路:直接上杜教筛. 知道怎么推导就很简单了,注意预处理的范围. 然后我因为预处理范围不对被zxyoi教育了(ldx你这个傻×两倍常数活该被卡TLE) 喜闻乐见 代码: #includ ...
- 结构体struct、联合体union、枚举类型enum
1.c语言中的类型 1)内置类型——char,short,int,float,double: 2)用户自定义类型(UDT)——struct结构体,union联合体,enum枚举类型 2.内存对齐 2. ...
- 前端基于easyui的mvc扩展
背景 由于MVC的前端是基于jquery.validate和jquery.validate.unobtrusive来实现的,但是当我们要使用其他的ui组件且组件本身就带有完整的验证功能的话,那么要让它 ...
- RxSwift学习笔记8:filter/distinctUntilChanged/single/elementAt/ignoreElements/take/takeLast/skip/sample/debounce
//filter:该操作符就是用来过滤掉某些不符合要求的事件. Observable.of(1,2,3,4,5,8).filter({ $0 % 2 == 0 }).subscribe { (even ...