js基础总结01 --操作DOM
1、选择对象
- 通过id来选择绑定一个dom节点 :document.getElementById('p1');
- 通过类名来绑定一个类数组的对象集合,:document.getElementsByClassName('p');//类似的还有 document.getElementsByName、document.getElementsByName等
- 通过css选择器来返回第一个匹配的dom节点:document.querySelector('#p1');
- 通过css选择器来返回一个类数组的对象集合:document.querySelectorAll('p');
- 应尽量避免用queryselector和queryselectorAll来查询绑定对象,因为这样效率慢
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>test</title>
</head>
<body>
<p id="p1">1</p>
<p class="p">2</p>
<p class="p">3</p>
<script>
window.onload = function(){
document.getElementsByName
document.getElementsByTagName
console.log(document.getElementById('p1'));//<p id="p1">1</p>
console.log(document.getElementById('p2'));//null,找不到
console.log(document.getElementsByClassName('p'))//HTMLCollection(2) [p.p, p.p],返回类数组的对象集合
console.log(document.querySelector('#p1'));//<p id="p1">1</p>
console.log(document.querySelector('#p2'));//null,找不到返回null
console.log(document.querySelector('p'));//<p id="p1">1</p>,返回匹配到的第一个节点
console.log(document.querySelectorAll('p'));//NodeList(3) [p#p1, p.p2, p],返回匹配到的类数组的对象集合
console.log(document.querySelectorAll('p').pop());//test.html:24 Uncaught TypeError: document.querySelectorAll(...).pop is not a function
}
</script>
</body>
</html>
示例
注意:document.getElementsByClassName('p')等返回的是一个HTMLCollection 对象集合,document.querySelectorAll('p')返回的是一个NodeList 对象集合,两者没有很大的不同,但要注意‘访问 HTMLCollection 项目,可以通过它们的名称、id 或索引号访问 NodeList 项目,只能通过它们的索引号’--这是w3School里的解释。
注意:类数组的对象集合之所以不能称为数组,是因为它们没有数组的pop(),join()等方法
2、操作属性
- 直接通过修改style来修改属性:document.getElementById('p').style.color = 'red'; .cssText += 'color:red;display:block;'//集合操作
- 通过添加类名来实现:document.getElementById('p').className = 'red';//会覆盖原有的类 ~~~改为document.className += ' red',就不会了
- 通过节点的classList添加一个类:document.getElementById('p').classList.add('red');//不会覆盖原有的,从尾部添加
- 通过setAttribute来直接向html标签中添加class="xxx"属性:document.getElementById('p').setAttribute('class','red');
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>test</title>
<style>
.red{
color:red;
}
</style>
</head>
<body>
<p id="p" class="p-default">1</p>
<p>2</p>
<script>
window.onload = function(){
// document.getElementById('p').style.color = 'red';
// document.getElementById('p').className = 'red';//直接给选定节点设置类名,会覆盖掉原有的类
// document.getElementById('p').classList.add('red');//直接给节点添加一个类,排在原有类的后面,添加已有的类名。及不操作
// document.getElementById('p').classList.remove('p-default');//删去选定的类
// document.getElementById('p').setAttribute('class','red');//直接向html标签里添加class="xxx"的属性
}
</script>
</body>
</html>
示例
3、绑定事件
- 直接才html标签中绑定事件,通过<p onclick="functionName()"></p>,类似的形式进行绑定
- 对绑定好的dom对象, document.getElementById('p').onclick = function(){}类似的方法进行绑定
- 添加事件监听的方式 document.getElementById('p').addEventListener('click',function(){})进行绑定
4、获取属性和值
- 获取html内容:document.getElementById('p').innerHTML
- 直接通过属性名获取:document.getElementById('p').属性名
- 通过getAttribute获取:document.getElementById('p').getAttribute('属性名')
5、操作节点

6、节点类型(2019-11-27 补充)
一共12种,以下为常用的,每个类型的节点都有相应的nodeName和nodeValue和nodeType等

代码实例:
<body>
<div id="box" class="div">
<p>123</p>
<!-- <span>111</span> --></div>
<script>
var oBox = document.getElementById('box');
console.log(oBox.ELEMENT_NODE);//1,元素节点
var oBoxAttrNode = oBox.attributes;//属性节点集合
console.log(oBoxAttrNode[0].nodeType);//2,属性节点
console.log(oBoxAttrNode[0].ATTRIBUTE_NODE);//2,属性节点
console.log(oBoxAttrNode[0].nodeName+' '+oBoxAttrNode[0].nodeValue);//属性节点的名和值
var oBoxTextNode = oBox.getElementsByTagName('p')[0].firstChild;
console.log(oBoxTextNode.nodeType);//3,文本节点
console.log(oBoxTextNode.nodeName+' '+oBoxTextNode.nodeValue);//#text 123
var oBoxCommentNode = oBox.lastChild;
console.log(oBoxCommentNode.COMMENT_NODE);//8注释节点
console.log(oBoxCommentNode.nodeType+' '+oBoxCommentNode.nodeName+' '+oBoxCommentNode.nodeValue); //8, 不能有空格 </script>
</body>
7、浏览器渲染Dom节点的顺序
- 处理html并构建dom树
- 处理css等文件并构建cssom树
- 将dom树和cssom树合并成一个渲染树(节点不一定同dom树,有display:none等情况)
- 根据渲染树来计算每个节点的位置和尺寸
- 将每个节点绘制到屏幕上
注:在解析dom树时遇到script标签或外连的js文件,及js里修改变动dom节点都会导致上述渲染过程重复执行,js操作dom耗时长有以上原因,
解析js中,dom节点没有解析时会出现错误等,这时script标签的属性defer(延迟执行)和async(异步执行)就可以用来控制js中影响dom操作的加载顺序
8、节点的嵌套顺序
常见html的元素节点分为块级元素和行内元素,顾名思义,块级元素是一个块可以设置框高,且独占一行(width:默认为100%),行内元素大部分不能设置宽高,长度随内容撑开。
注:以上为默认的css属性,显示修改的话会按照设置的属性运行,如:display:inline-block,可以将一个行内元素变成可设置宽高
常见的块级标签:div、h1~h6、p、form、ul、ol、li、table、tr、td、dd、dt等
常见的行内标签:span、label、img、a、import、select、input、textarea、button等,其中img,textarea为特殊的可设置宽高的行内元素
节点的嵌套规则:行内元素不能包含块级元素,块级元素可以包含行内元素和块级元素
注:h1、h2、h3、h4、h5、h6、p、dt等只能包含行内元素
9、添加or删除节点
创建一个新节点:
以上要注意是什么时候是 HTMLCollection,什么时候是NodeList,两者的具体区别,待后续补充吧。
js基础总结01 --操作DOM的更多相关文章
- GSAP JS基础教程--TweenLite操作元素的相关属性
今天来学习用TweenLite操作元素的各种属性,以Div为例,其他元素的操作也是一样的,只是可能一些元素有它们的特殊属性,就可能不同罢了. 代码里用详细注释,我就不再重复啦,大家看代码就可以啦! ...
- 廖雪峰js教程笔记11 操作DOM(包含作业)
由于HTML文档被浏览器解析后就是一棵DOM树,要改变HTML的结构,就需要通过JavaScript来操作DOM. 始终记住DOM是一个树形结构.操作一个DOM节点实际上就是这么几个操作: 更新:更新 ...
- JavaScript DOM编程基础精华01(DOM入门,DOM模型和获取页面元素,事件,window对象的方法)
DOM入门 DOM就是Html页面的模型,将每个标签都做为一个对象,JavaScript通过调用DOM中的属性.方法就可以对网页中的文本框.层等元素进行编程控制.比如通过操作文本框的DOM对象,就可以 ...
- 二、JavaScript语言--JS基础--JavaScript进阶篇--DOM对象 控制HTML元素
1.认识DOM 文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法.DOM 将HTML文档呈现为带有元素.属性和文本的树结构(节点树). 先来看看下面 ...
- 3-14 JS基础知识01
JavaScript的组成: JS特点:JS是一门 脚本语言:不需要编译编译:把代码转化成计算机所认知的二进制语言.JS是一门弱类型语言:声明变量都用varJS是一种动态语言:认知当前的着这个变量到底 ...
- 基础3.Jquery操作Dom
1 内部插入节点 <body> <ul id="city"> <li id="bj" name=&qu ...
- JS基础之属性操作注意事项
1.js中注意问题 font-size 改成fontSize padding-top 改成paddingTop 2.js动态添加Class class 改成className 3.oInp.ty ...
- JS基础内容小结(DOM&&BOM)(二)
元素.childNodes:只读 属性 子节点列表集合 元素.nodeType:只读 属性 当前元素下的节点类型 元素.attributes : 只读 属性 属性列表集合 元素.children: 只 ...
- JS基础知识-01
01-浅谈前端发展史 第一阶段:C/S(client server)->B/S(browser server) 网页制作 技术栈:PhotoShop.HTML.CSS 第二阶段:从静态到动态,从 ...
随机推荐
- 通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷
上一篇"通过实例快速掌握k8s(Kubernetes)核心概念"讲解了k8s的核心概念,有了核心概念整个骨架就完整了,应付无状态程序已经够了,但还不够丰满.应用程序分成两种,无状态 ...
- CentOS8 yum/dnf 配置国内源
CentOS8 yum/dnf 配置国内源(临时) CentOS 8更改了软件包的安装程序,取消了 yum 的配置方法,改而使用了dnf 作为安装程序.虽然改变了软件包的安装方式,但是 dnf 还是能 ...
- IoC 之加载 Bean:总结
上文中我们将bean已经加载到了IOC容器中,接下来我们将把IOC加载Bean出来进行代码解析 备注:(有些解释是参考别个博客的相关解释 )一起探讨请加我QQ:1051980588 bean 的初始化 ...
- Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)
本文原创首发于公众号:Java技术干货 1.概述 本文将Nacos作为配置中心,实现配置外部化,动态更新.这样做的优点:不需要重启应用,便可以动态更新应用里的配置信息.在如今流行的微服务应用下,将应用 ...
- Tomcat线程参数maxThreads、acceptCount
一.配置Tomcat/conf/server.xml修改配置 <Connector port="8080" protocol="org.apache.coyote. ...
- 项目二:企业级java电商网站开发(服务端)
声明:项目源于网络,支持正版教程,学习使用,仅记录在此 项目介绍 企业级java电商网站开发(服务端),模块划分:用户管理,商品管理,商品品类管理,订单管理,订单详情管理,购物车管理,收货地址管理,支 ...
- 项目一:ssm超市订单管理系统
声明:项目参考于课程教材,学习使用,仅在此记录 项目介绍 ssm超市订单管理系统,功能模块有订单管理,供应商管理,用户管理,密码修改,退出系统,管理模块中包括基本的增删改查 集成工具使用idea,基于 ...
- 02-18 scikit-learn库之k近邻算法
目录 scikit-learn库之k近邻算法 一.KNeighborsClassifier 1.1 使用场景 1.2 代码 1.3 参数详解 1.4 方法 1.4.1 kneighbors([X, n ...
- Windows快捷方式绑马
0x01前言 windows的shell32在处理控制面板程序的快捷方式文件时,存在一个漏洞,可以加载硬盘上的任意DLL文件,即可执行任意代码. 之前看到一款俄罗斯黑阔写的的快捷方式下载木马并运行的生 ...
- Figures Inscribed in Curves (曲线上的图形)
Figures Inscribed in Curves\text{Figures Inscribed in Curves}Figures Inscribed in Curves A short tou ...