### JS中常用的DOM操作
> DOM:document object model 文档对象模型(提供一系列的属性和方法,供我们获取和操作DOM元素)
#### 1.获取DOM的方式
- document.getElementById([元素的ID]):在整个文档中,根据元素的ID,获得这个元素对象
+ document是获取元素的上下文(获取元素的范围),getElementById方法的上下文只能是document
+ 获取到的结果是一个对象(堆内存:里面存储着很多内置的属性和方法)
- [context].getElementsByTagName([标签名]):在指定的上下文中,基于元素的标签名获取一组元素集合
+ 获取的结果是HTMLCollection元素集合
- [context].getElementsByClassName([样式类名]):在指定上下文中,基于样式类名获取对应的元素集合
+ 不兼容IE6~8低版本浏览器
- document.getElementsByName([NAME属性值]):根据元素的NAME属性值,在整个文档中获取一组元素集合
+ 在IE浏览器中(9及以下)只对表单元素作用
- document.documentElement:获取整个HTML元素对象(HTML是页面的根节点)
- document.body:获取整个BODY元素对象
- document.head:获取整个HEAD元素对象
不兼容IE6~8低版本浏览器,可以根据选择器(类似于CSS选择器)快速获取元素和元素集合的办法:
- [context].querySelector([SELECTOR]) 获取一个元素对象
- [context].querySelectorAll([SELECTOR]) 获取一组元素集合
在不考虑兼容的情况下,这两个方法就足以获取我们需要的元素对象和元素集合了
#### 2.获取DOM节点的属性和方法
> 我们认为在页面中所有呈现的内容,都是DOM文档中的一个节点(node),例如:元素标签是元素节点、注释的内容是注释节点、文本内容是文本节点、document是文档节点...
#### 3.关于DOM元素中的增加/删除/修改
- document.createElement([标签名]):动态创建一个DOM元素
- [CONTAINER].appendChild([元素]):把元素动态插入到指定容器的末尾
- [CONTAINER].insertBefore([新元素],[原始页面中的元素]):把新创建的元素放置到指定容器原始页面元素的前面 [原始页面中的元素]肯定在[CONTAINER]容器中
- [CONTAINER].removeChild([元素]):在指定容器中移除元素
- document.createTextNode():创建一个文本节点
- ...
- 设置元素的属性/自定义属性
+ 元素.xxx=xxx
+ 元素.setAttribute(xxx,xxx) setAttribute/getAttribute/removeAttribute
#### 4.修改DOM元素的样式
- 元素.style.xxx :修改(获取)当前元素的行内样式
+ 操作的都是行内样式,哪怕把样式写在样式表中,只要没有写在行内上,也获取不到
- 元素.className:操作的是当前元素的样式类,基于样式类的管理给予其不同的样式
#### 5.给DOM元素设置内容
- innerHTML / innerText:给非表单元素设置或者操作其内容
- value:操作表单元素的内容
~~~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
<title>珠峰培训 - 微信:18310612838</title>
<!-- IMPORT CSS -->
<style>
.active {
color: red;
background-color: lightblue;
}
</style>
</head>
<body>
<div class="box">
<h2 class="title">新闻标题</h2>
<ul class="item" id="itemBox">
<li class="noLine">我是第1条新闻</li>
<li>我是第2条新闻</li>
<li class="noLine">我是第3条新闻</li>
<li>我是第4条新闻</li>
<li>我是第5条新闻</li>
</ul>
</div>
<div class="noLine" name="AAA">我是外面的DIV</div>
<input type="text" name="AAA">
<!-- IMPORT JS -->
<script>
// 或者.ITEM这个UL
// document.getElementById('itemBox');
// document.getElementsByTagName('ul')[0];
// document.getElementsByClassName('item')[0];
// querySelector不管匹配的结果有多少个,都只获得第一个(元素对象)
// #itemBox .item ul ...
// let itemBox = document.querySelector('ul');
// console.log(itemBox);
// querySelectorAll获取的都是集合(哪怕只有一项也是集合)
// let navList = document.querySelectorAll('#itemBox li');
// console.log(navList);
</script>
<script>
/*
// 获取整个页面中所有具备 noLine 样式类的元素
// let noLines = document.getElementsByClassName('noLine');
// console.log(noLines); //=>[li,li,div]
// 获取到的结果是元素集合,不管集合中有几项,它都是集合
let item = document.getElementsByClassName('item');
item = item[0]; //=>获取集合中的第一项(这才是我们要操作的ITEM元素对象)
let noLines = item.getElementsByClassName('noLine');
console.log(noLines); //=>[li,li]
*/
/*
var AAAS = document.getElementsByName('AAA');
console.log(AAAS); //=>[div,input] IE9 [input] 真实项目中也是基于它操作表单元素的,尤其是单选框或者复选框
*/
</script>
<script>
/* let itemBox = document.getElementById('itemBox'),
navList = itemBox.getElementsByTagName('li'); */
// console.dir(itemBox); //=>它是一个对象:itemBox.xxx=xxx
// console.dir(navList); //=>它是一个元素集合HTMLCollection(类数组集合:数字作为索引,LENGTH代表长度),集合中的每一项是单独的元素对象 navList[0].xxx=xxx
//===========设置样式
/* itemBox.style.color = 'red';
itemBox.style.backgroundColor =
'green'; //=><ul class="item" id="itemBox" style="color: red; background-color: green;"> 设置的结果都是行内样式
itemBox.style.cssText = `color: red; background-color: green;`; 这种方式是STYLE一个个设置样式的简写,批量给行内上设置很多样式 */
/* itemBox.className = 'active'; //=>CLASSNAME这样操作会把之前的样式类名给覆盖掉
itemBox.className += ' active'; //=>这样也可以,记得加空格区分每个样式类
itemBox.classList.add('active'); //=>向指定样式集合中新增一个样式类(兼容性差) */
</script>
</body>
</html>
~~~
- 0001.开课说明
- 0002.ECMAScript的发展历程
- 0003.WEB2.0时代-服务器端渲染,前后端不分离
- 0004.WEB2.0时代-前后端分离模式
- 0005.大前端时代概述
- 0006.前端需要的技术栈和学习技巧
- 0007.浏览器
- 0008.JS的三部分组成
- 0009.JS中创建变量的6种形式
- 0010.JS中变量的命名规范
- 0011.JS中的数据类型分类
- 0012.JS中常用的几种输出方式
- 0013.number属性类型详细解读1
- 0014.number数据类型详细解读2
- 0015.string数据类型详细解读1
- 0016.string数据类型详细解读2
- 0017.boolean数据类型详细解读
- 0018.object数据类型详细解读1
- 0019.object数据类型详细解读2
- 0020.谈谈学习
- 0021.数据类型检测
- 0022.浏览器底层渲染机制(堆栈内存和数据类型区别)
- 0023.关于数据类型区别的面试题
- 0024.课后作业讲解:数据类型转换
- 0025.课后作业讲解:堆栈内存处理
- 0026.课后作业讲解:阿里的一道经典面试题
- 0027.JS中三种常用的判断语句
- 0028.小实战:开关灯特效
- 0029.FOR循环和FOR IN循环
- 0030.课后作业讲解:关于循环判断和数据转化
- 0031.课后作业讲解:关于DOM对象的深入理解
- 0032.关于元素集合的相关操作(奇偶行变色)
- 0033.课后作业讲解:逻辑思维判断题
- reset.min.css
- 0034.(复习)前四天内容的综合复习梳理
- 0035.初窥函数:函数的作用、语法、形参
- 0036-0038.选项卡案例
- 0039.隔行变色案例:进一步强化自定义属性编程思想
- 0040.其它作业题的讲解(自定义属性强化)
- 0041.函数创建和执行的堆栈运行机制
- 0042.函数中的形参和实参
- 0043.函数中的实参集合ARGUMENTS
- 0044.函数中的返回值RETURN
- 0045.箭头函数和匿名函数
- 0046.两个等于比较时候的数据类型转换规则
- 0047.数组的基础结构和常规操作
- 0048.数组常用方法:增删改的五个方法
- 0049.数组常用方法:查询、拼接、转换为字符串
- 0050.数组常用方法:检测是否包含、排序和迭代
- 0051.数组去重:双FOR循环(数组塌陷和SPLICE删除优化)
- 0052.数组去重:对象键值对方式(ES6中SET)
- 0053.Math数学函数对象中常用的方法
- 0054.String字符串中常用的方法
- 0055.实战案例:时间字符串格式化
- 0056.实战案例:queryURLParams1
- 0057.实战案例:queryURLParams2
- 0058.实战案例:获取四位不重复的验证码
- 0059.阶段作业题讲解1(基础知识)
- 0060.阶段作业题讲解2(实战案例)
- 0061-0062.DOM操作中相关知识的复习
- 0063.DOM中的节点操作1
- 0064.DOM中的节点操作2
- utils
- 65.关于DOM的增删改