创建元素:这个元素是不会渲染到页面上的,它不在DOM中
var box2=document.createElement("div")//传入的字符串 是标签的名字
也就是说这一行代码写出来,到现在为止,他只是创建了这样一个标签,还并没有在文档树中添加
添加类名与移除类名
添加类名
box2.className="box2"
box2.classList.add("box2")(这种方法只能一次写一个参数,但可以写几次)
也可以是一次写两个类名
box2.className="box2 box3"
删除类名
box2.classList.remove("box2")
操作文档树——添加
box.appendChild(box2)
添加到文档树中,x.appendChild(y) 把y节点对象添加到x节点中
box2.innerHTML="6666"//666会把box2内部的所有元素全部覆盖
克隆
var box2=box.cloneNode()//连同box的后代元素和所有的事件 一起克隆
案例1:
- <div id="mainbox">
-
- div>
- <script>
- var mysina={
- a:20,
- b:"20条新浪微博",
- arr:[
- {
- id:12345,
- text:"微博内容1微博内容1微博内容1微博内容1微博内容1微博内容1微博内容1微博内容1微博内容1微博内容1微博内容1微博内容1",
- comments_count:20,
- att_count:80,
- report:13,
- imgs:["./src/2.jpg","./src/3.jpg","./src/4.jpg"]
- },
- {
- id:12346,
- text:"山东高法第三帝国电饭锅山东高法第三帝国电饭锅山东高法第三帝国电饭锅山东高法第三帝国电饭锅山东高法第三帝国电饭锅山东高法第三帝国电饭锅山东高法第三帝国电饭锅山东高法第三帝国电饭锅山东高法第三帝国电饭锅",
- comments_count:250,
- att_count:820,
- report:1323,
- imgs:["./src/5.jpg","./src/6.jpg","./src/7.jpg","./src/8.jpg","./src/9.jpg","./src/10.jpg"]
- }
- ]
- }
-
-
- console.log(mysina)
- //1.创建一个放新闻的大盒子,把它添加到mainbox中
- for(var i=0;i
arr.length;i++){ - var box1=document.createElement("div")
- mainbox.appendChild(box1)
- // 添加类名
- box1.className="box1"
-
-
- //2.创建一个放标题的盒子 添加到新闻大盒子
- var title=document.createElement("div")
- box1.appendChild(title)
-
- // 添加文本innerHTML,是mysina中的数据
- title.innerHTML=mysina.arr[i].text
-
- //添加类名,让它排版排在新闻大盒子的上面
- title.classList.add("title")
-
-
-
- //3.创建一个放图片的盒子box2 添加到新闻大盒子
- //添加类名,让它排版排在新闻大盒子的中间,写弹性布局让它内部的图片排版整齐
- var imgbox=document.createElement("div")
- imgbox.className="imgbox"
- box1.appendChild(imgbox)
-
-
- //4.
- //根据图片数据的个数创建对应个数的图片标签
- // 把图片全部添加到box2中
- //给图片加类名
- // 给图片加src
-
- mysina.arr[i].imgs.forEach((el)=>{
- var img1=document.createElement("img")
- img1.classList.add("img1")
- img1.src=el
- imgbox.appendChild(img1)
- })
-
- }
- //5.底部条
-
-
- script>
因为在现实操作中,每天的数据都是不同的,数据是流动的,往往只靠html写一个静态的页面是不行的,所以,我们要从后端获取到数据,然后根据这个数据去渲染当前的页面。
案例2:模糊弹窗
- document.querySelector("#loginbtn1").onclick=function() {
- console.log(66666)
- //创建半透明的蒙版层
- var modelbox=document.createElement("div")
- modelbox.classList.add("modelbox")
- document.body.appendChild(modelbox)
-
-
- var loginbox=document.createElement("div")
- loginbox.classList.add("loginbox")
- modelbox.appendChild(loginbox)
- }
在一般网页中我们都与遇到模糊弹窗例如点击登录/注册页面的时候。怎么实现呢
首先,我们直接创建一个div标签设置他的样式,将他铺满整个屏幕,因为是铺满整个屏幕所以直接添加再body里面,然后再创建一个div标签设置登录窗口,添加到之前我们添加的大div标签中,作为他的登录/注册框。通过固定定位来固定他的位置。
效果如下
案例3:信息录入系统
- <style>
- body {
- font-family: "楷体";
- }
-
- .wrapper {
- width: 300px;
- margin: 0 auto;
- /* background-color: red; */
- text-align: center;
- color: blue;
- }
-
- .wrapper>div {
- margin-top: 10px;
- }
-
- .info {
- width: 100px;
- outline: none;
- border-radius: 5px;
- border: 1px solid #ccc;
- text-indent: 5px;
- }
-
- .btn {
- width: 50px;
- height: 25px;
- border-radius: 5px;
- border: 1px solid #ccc;
- background-color: skyblue;
- color: #000;
- outline: none;
- }
-
- table {
- width: 600px;
- margin-top: 50px;
- margin-left: -150px;
- border: 1px solid #ccc;
- }
-
- td {
- width: 20%;
- }
-
- th {
- background-color: blue;
- color: #fff;
- }
- td input{
- width: 100px;
- }
- style>
- head>
-
- <body>
- <div class="wrapper">
- <div>学号:<input class="info" type="text" value="1">div>
- <div>姓名:<input class="info" type="text" value="1">div>
- <div>年龄:<input class="info" type="text" value="1">div>
- <div>爱好:<input class="info" type="text" value="1">div>
- <div>地址:<input class="info" type="text" value="1">div>
- <div>
- <input type="submit" class="btn" value="添加">
- <input type="reset" class="btn" value="重置">
- div>
-
- <table>
- <tr>
- <th>学号th>
- <th>姓名th>
- <th>年龄th>
- <th>爱好th>
- <th>癖好th>
- <th>操作th>
- tr>
- table>
-
-
- div>
-
- <script>
- var btns = document.querySelectorAll(".btn")
- //重置
- btns[1].onclick = function() {
- var infos = document.querySelectorAll(".info")
- infos.forEach((el) => {
- //el是每一个.info的输入框
- el.value = ""
- })
- //btn取到了两个按钮,这设置的是重置按钮,给重置按钮绑定点击事件,通过类选择器获取到所有的输入框,通过foreach循环把所有输入框的值改为空字符串
- }
- btns[0].onclick = function() {
- //创建tr元素 添加到table中
- var wrappertab = document.querySelector(".wrapper table")
- var tr = document.createElement("tr")
- wrappertab.appendChild(tr)
- var infos = document.querySelectorAll(".info")
- infos.forEach((el) => {
- var td = document.createElement("td")
- td.innerHTML = el.value
- tr.appendChild(td)
- })
- //通过类选择器获取到所有的输入框,通过foreach循环把所有输入框的值在td.innerHTML方法添加到页面上,在把td标签添加到tr上
- var tdlast = document.createElement("td")
- tr.appendChild(tdlast)
- // tdlast.innerHTML="666"
- var delbtn = document.createElement("button")
- delbtn.innerHTML = '删除'
- delbtn.classList.add("btn")
- tdlast.appendChild(delbtn)
- delbtn.onclick = function() {
- // console.log(this)
- this.parentNode.parentNode.remove()
- }
- //设置表单的最后一项,把他们分成两个按钮分别是修改和删除
- var setbtn = document.createElement("button")
- setbtn.innerHTML = '修改'
- setbtn.classList.add("btn")
- tdlast.appendChild(setbtn)
- let flag = true
- setbtn.onclick = function() {
- // console.log(this,111111)
- // 开关思想 当点击第一下是修改后 ,操作修改键变成保存键
- flag = !flag
- if (flag) {
- console.log("开")
- this.innerHTML = "修改"
-
- //把当前这一排的 td内部的输入框的数据 value 获取了设置到td中
- let tds=this.parentNode.parentNode.children
- Array.from(tds).forEach((el,index)=>{
- if(index==tds.length-1){return}
- el.innerHTML=el.children[0].value
- })
- } else {
- console.log("关")
- this.innerHTML = "保存"
- //把当前这一排的 td的innerHTML 替换成input
- let tds = this.parentNode.parentNode.children
- Array.from(tds).forEach((el, index) => {
- if (index != tds.length-1) {
- var text = el.innerHTML
- el.innerHTML = ""
- var input1 = document.createElement("input")
- input1.value = text
- el.appendChild(input1)
- }
- })
- }
-
- }
- }
- script>
- body>
最后我们再讲一个比较简单的插入元素的方法
box.insertBefore(要插入的元素,要插入的位置)
但是没有insertAfter这个函数这个函数只能由用户自己在写在原型链上使用