前端之DOM
老师的博客:https://www.cnblogs.com/liwenzhou/p/8011504.html
DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
HTML DOM 模型被构造为对象的树。
DOM标准规定HTML文档中的每个成分都是一个节点(node):
- 文档节点(document对象):代表整个文档
- 元素节点(element 对象):代表一个元素(标签)
- 文本节点(text对象):代表元素(标签)中的文本
- 属性节点(attribute对象):代表一个属性,元素(标签)才有属性
- 注释是注释节点(comment对象)
JavaScript 可以通过DOM创建动态的 HTML:
- JavaScript 能够改变页面中的所有 HTML 元素
- JavaScript 能够改变页面中的所有 HTML 属性
- JavaScript 能够改变页面中的所有 CSS 样式
- JavaScript 能够对页面中的所有事件做出反应
查找标签
直接查找
对于样式
document.getElementById(id) 根据ID获取一个标签
document.getElementsByClassName(class) 根据class属性获取
对于标签
document.getElementsByTagName(div) 根据标签名获取标签合集
注意:id是element,而其它是elments
涉及到DOM操作的JS代码应该放在文档的哪个位置
间接查找
parentElement 父节点标签元素
children 所有子标签
firstElementChild 第一个子标签元素
lastElementChild 最后一个子标签元素
nextElementSibling 下一个兄弟标签元素
previousElementSibling 上一个兄弟标签元素
为了详细的这些方法的使用,见下面的代码
HTML
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>review53</title>
<style>
div>
.c1{height:500px;
width:500px;
background:yellow ;
border-radius: 5%;
overflow:auto;}
.p1{
color: rgb(112,121,142);
display:inline-block;}
#nb{color:#569823}
.p2{color:red}
</style> </head>
<body>
<div class="c1">我是一个div我的类是c1
<p class="p2">我是div中的p标签 class=p2
<span class="p1">我是div的孙子 class=p1</span>
</p>
<p class="p1"> 我是第二个div的子标签 class p1</p>
</div>
<p calss="p1">我是一个单独的p标签 我的类是p1</p>
<a href="https://www.jd.com" >小哥哥快来玩啊</a>
<div id="nb">我是一个代表nbid的div</div>
<script src="查找标签.js" ></script>
</body>
</html>
javascript
alert('欢迎来到德莱联盟');
console.log('查找标签');
// 直接查找document.getElementById 根据ID获取一个标签
// document.getElementsByClassName 根据class属性获取
// document.getElementsByTagName 根据标签名获取标签合集
var laoda=document.getElementsByClassName('c1');
console.log(laoda);
var son=document.getElementsByClassName('p2');
var grandson=document.getElementsByClassName('p1');
// parentElement 父节点标签元素
var par=son[0].parentElement;
console.log('查找父标签',par);
// children 所有子标签
var childr=laoda[0].children;
// var childr1=laoda[0].childList 不知道是啥,打印出来是undefined
console.log('所有子标签',childr);
// console.log('childenlist',childr1)
// firstElementChild 第一个子标签元素
// var firstchi=laoda[0].firstChild; // 返回时文本
var first1=laoda[0].firstElementChild;
console.log('第一个子标签',first1);// 返回是个文本
// lastElementChild 最后一个子标签元素
var lastchil=laoda[0].lastElementChild;
// lastchild 返回的是文本
console.log('最后一个子标签',lastchil);
// nextElementSibling 下一个兄弟标签元素
var next=laoda[0].nextElementSibling;
console.log('下一个兄弟标签',next);
// previousElementSibling 上一个兄弟标签元素
var previ=laoda[0].previousElementSibling;
console.log('上一个兄弟标签',previ);
直接查找没有会显示null,但是直接查找会影响间接查找,如果直接查找的值为null的话,间接查找会直接报错。
id 查找的元素可以直接使用,不用再加上[].
返回都是一个列表
节点操作
你可以把节点看做是<p><div>之类的
创建节点
语法:createElement(标签名)
var divEle = document.createElement("div");
添加节点的属性:
添加节点
在最后添加一个子节点:
somenode.appendChild(newnode);
把节点放在某个节点的前面
somenode.insertBefore(newnode,某个节点);
节点属性:
a.setAttribute('alt','你的哈士奇正在路上');
p3.innerText='我是p3的文本'; //文本添加
节点.setAttribute(参数名,参数值);
节点.innerText=值;
删除节点
语法:
获得要删除的元素,通过父元素调用该方法删除。
somenode.removeChild(要删除的节点)
替换节点
语法:
也是通过父类的方法去调用。
somenode.replaceChild(newnode, 某个节点);
节点属性
获取文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText
divEle.innerHTML
设置文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText="1"
divEle.innerHTML="<p>2</p>"
attribute操作
var divEle = document.getElementById("d1");
divEle.setAttribute("age","18")
divEle.getAttribute("age")
divEle.removeAttribute("age") // 自带的属性还可以直接.属性名来获取和设置
imgEle.src
imgEle.src="..."
获取值操作
语法:
elementNode.value
适用于以下标签:
- .input
- .select
- .textarea
var iEle = document.getElementById("i1");
console.log(iEle.value);
var sEle = document.getElementById("s1");
console.log(sEle.value);
var tEle = document.getElementById("t1");
console.log(tEle.value);
class的操作
className 获取所有样式类名(字符串) classList.remove(cls) 删除指定类
classList.add(cls) 添加类
classList.contains(cls) 存在返回true,否则返回false
classList.toggle(cls) 存在就删除,否则添加
指定CSS操作
obj.style.backgroundColor="red"
JS操作CSS属性的规律:
1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:
obj.style.margin
obj.style.width
obj.style.left
obj.style.position
2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:
obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily
上诉集合代码
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>节点测试</title>
<style>
.div1{
color: rgb(12,248,32);
}
.p1 {
background: #998891;
}
.p2 {
background: #119999;
}
.sel{
confize:20px;
}
</style>
</head>
<body>
<div class="div1">我是div class=div1
<p class="p1">我是在div中的p1 class=p1</p>
<p class="p2">我是在div中的p2 class=p2</p>
</div>
<lable>地址:</lable>
<select name="location" id="location">
<optgroup>
重庆
<option name="yz">渝中区</option>
<option name="spb">沙坪坝区</option>
<option name="yb">渝北区</option>
</optgroup> </select>
<script src="节点测试.js"></script>
</body>
</html>
javascipt
// 创造节点
// alert('创造节点');
var div2=document.createElement('div');
var p3=document.createElement('p');
var p4 =document.createElement('p');
var a = document.createElement('img');
// alert('添加节点属性');
a.setAttribute('src','https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=4083886402,415126003&fm=27&gp=0.jpg');
a.setAttribute('alt','你的哈士奇正在路上');
p3.innerText='我是p3的文本'; //文本添加
p4.innerText='我是p4的文本';
p3.setAttribute('class','p2');
p4.setAttribute('class','p1');
// alert('获取标签');
var classc1=document.getElementsByClassName('div1')[0];
console.log('获取class为div1 的标签',classc1);
classc1.appendChild(a);
var classp1=document.getElementsByClassName('p1')[0];
// 把p3放在classp1的前面
classc1.insertBefore(p3,classp1);
var classp2=document.getElementsByClassName('p2')[1];
// classc1.insertAfter(p3); 据说没有这个方法,要自己写,百度有
// 21行的情况有点复杂,本来有两个为p2类的。但是26删除了一个,但是执行到这步时候,其实两个值,但是在浏览器的console只能查看一个,所以此时[1]
console.log(classp2);
// 删除节点
classc1.removeChild(p3);
// 替换节点
classc1.replaceChild(p4,classp2);
// 获取文本节点的值
console.log('classc1.html:',classc1.innerHTML);
console.log('classc1.innerText:',classc1.innerText);
// 设置节点的值 不推荐使用 // classc1.innerText='classc1.innerText: 我是div class=div1\n' +
// '\n' +
// '我是在div中的p1 class=p1\n' +
// '\n' +
// '我是p4的文本';
// classc1.innerHTML='我是div class=div1\n' +
// ' <p class="p1">我是在div中的p1 class=p1</p>\n' +
// ' <p class="p1">我是p4的文本</p>\n' +
// '<img src="https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=4083886402,415126003&fm=27&gp=0.jpg" alt="你的哈士奇正在路上">';
// 属性操作 对于命名的属性 a.标签的src在上面已经设置了,所以可以改
console.log(classc1.color);
a.src='https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3184510818,39967754&fm=27&gp=0.jpg';
//获取值
var classlocation=document.getElementById('location');
console.log('classlocation:',classlocation.name);
//class操作
var name=p3.className; //查看节点的类别名
console.log(name);
var classpp=document.getElementsByClassName('p1')[0]; //得到是个列表
classpp.classList.add('p2');//正价类
console.log('增加之后就有两个类名了:',classpp.className);
//制定css操作 classlocation.style.margin='10px'; //#将classp1的外边框改了
classlocation.style.borderColor='red';
classlocation.style.borderWidth='9px';//.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可
事件
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。
常用事件
onclick 当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。 // 练习:输入框
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。
onload 一张页面或一幅图像完成加载。
onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。 onselect 在文本框中的文本被选中时发生。
onsubmit 确认按钮被点击,使用的对象是form。
小练习,显示时间
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>shijian</title>
</head>
<body>
<div>时间的设置
<p><input id="time_content" type="text" >
<input id="start"type="submit" value="开始">
<input id="end" type="submit" value="结束"></p>
</div>
<script>
var now_time;
function foo1(){
var day =new Date();
var time_content=document.getElementById('time_content');
time_content.value=day.toLocaleString();
console.log(day.toLocaleString())
}
// 开始按钮
var start_time_content=document.getElementById('start');
start_time_content.onclick=function (){
if(now_time===undefined){
foo1();
now_time = setInterval(foo1, 1000);
}
};
var end_time_content=document.getElementById('end');
end_time_content.onclick=function () {
if(now_time){
clearInterval(now_time);
now_time=undefined;
}
}
</script> </body>
</html>
注意:此时千万不要在时间框的父级标签价form标签,因为form标签你的提交及sumbmit有刷新的功能,所以说然后代码就变回了原样。所以一定要记住。废了我太多的时间。
老师的博客上有关于省份选择的联系,有时间练一下。
。
前端之DOM的更多相关文章
- 【前端】:Dom
前言: 昨天写了篇关于JavaScript的,今天写篇Dom的(插入4个实例),写完之后感觉知识点还不少~ 内容当然会用到[前端]:JavaScript的知识.下篇博客会写关于jQuery~~ 一.D ...
- 前端之DOM操作
一.概念 javascript javascript是一种脚本语言,可以被浏览器解析,所以它可以称之为前端的三把利器之一. javascript跟java没有半毛钱关系. 声明局部变量:使用关键字va ...
- 前端基础 DOM & BOM
推荐阅读:http://www.cnblogs.com/yuanchenqi/articles/6893904.html#_label3 BOM对象 window 对象 所有浏览器都支持 window ...
- web前端之 DOM
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...
- web前端优化--DOM性能优化
1.DOM访问与修改的优化: DOM访问是有代价的,修改DOM则会引起DOM的重绘与重排,而这两种操作会消耗性能. (1)缓存DOM:将频繁访问的对象或属性使用变量缓存起来,每次访问的时候,直接使用变 ...
- 前端开发-DOM
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...
- HTML5 前端将 dom 元素转化为 Word,EXCEL 或者图片 并实现下载
< 一 > word 1,依赖于 jquery.html.word.js 插件 => https://blog-static.cnblogs.com/files/lovling/ ...
- 前端 ----关于DOM的操作的相关实例
关于DOM操作的相关案例 1.模态框案例 需求: 打开网页时有一个普通的按钮,点击当前按钮显示一个背景图,中心并弹出一个弹出框,点击X的时候会关闭当前的模态框 代码如下: <!DOCTYPE ...
- 前端 ----关于DOM的事件操作
关于DOM的事件操作 一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for ...
随机推荐
- MySQL数据库Inception工具学习与测试 笔记
MySQL语句的审核,在业界都已经基本被认同了,实际上也是对MySQL语句写法的统一化,标准化,而之前的人工审核,针对标准这个问题其实是很吃力的,标准越多,DBA越累,开发也越累. 那么在这个都追求自 ...
- VMWare安装Mac系统后无法全屏显示的问题
系统: VMTOOLs下载: 链接:https://pan.baidu.com/s/1KIzVWtPrb2vSrtokONToBw 提取码:zea3 1.虚拟机设置--显示器--监视器--指定监视器设 ...
- Variable SQLLOGDIR not found
昨天在一数据库(SQL Server 2008 R2 SP3)上部署了一个作业,今天早上收到告警邮件,作业执行报错"Unable to start execution of step 1 ( ...
- IconFont的iOS使用
IconFont的使用 Iconfont-国内功能很强大且图标内容很丰富的矢量图标库,提供矢量图标下载.在线存储.格式转换等功能.阿里巴巴体验团队倾力打造,设计和前端开发的便捷工具. https:// ...
- 加载静态界面----,要不要会加载cookie和页面参数
Server.Transfer(string.Format("/shouji/StaticHtml/RobLine/{0}.html", id),true); 加cookie. S ...
- .NET Core 给使用.NET的公司所带来的机遇
今晚在余晟的微信公众号看到了一篇文章< 从.NET/C#开发的“后继无人”说起: https://mp.weixin.qq.com/s/rO2d0xZ58Z2syqT7AaNT3w>. 这 ...
- 最短路问题之Dijkstra算法
题目: 在上一篇博客的基础上,这是另一种方法求最短路径的问题. Dijkstra(迪杰斯特拉)算法:找到最短距离已经确定的点,从它出发更新相邻顶点的最短距离.此后不再关心前面已经确定的“最短距离已经确 ...
- vue的基本指令
1.创建vue对象 <script src="vue.js"></script> var vm = new Vue({ el:"#ap ...
- chrome 错误 ERR_CACHE_READ_FAILURE
问题现象 谷歌浏览器,点击后退按键提示:ERR_CACHE_READ_FAILURE 错误 解决办法 1. chrome://flags/#enable-simple-cache-backend 2. ...
- RabbitMQ消息队列(一)-RabbitMQ的优劣势及产生背景
本篇并没有直接讲到技术,例如没有先写个Helloword.我想在选择了解或者学习一门技术之前先要明白为什么要现在这个技术而不是其他的,以免到最后发现自己学错了.同时如果已经确定就是他,最好先要了解下技 ...