DOM核心内容(基础部分)

文档对象模型(Document Object Model),处理可扩展标记语言的标准接口

我们获取过来的DOM元素是一个对象,所以称为文档对象模型

文档Document 元素 Element 节点 Node 标签名 tagName 类名className

文档流 document stream

获取body元素

document.body

获取html元素

document.documentElement
事件的概述

​ 事件就是触发响应的的事件

事件的组成:
  1. 事件源(获取事件源的方法看下面的5–查
  2. 事件类型 (添加事件绑定事件)
  3. 事件处理程序 (采取函数赋值的方法)

鼠标事件

关于DOM的操作,主要是针对元素的操作

主要有创建、增、删、改 、查、属性操作、事件操作

1–创建

  1. document.write
  2. element.innerHTML
  3. document.createElement

**document.write**

Document.write() 方法将一个文本字符串写入一个由 document.open() 打开的文档流,如果在已经加载完毕页面中调用此方法会导致页面的重绘。

document.write(markup);

markup:一个包含要写入文档的文本的字符串。

**element.innerHTML**

Element.innerHTML 属性设置或获取HTML语法表示的元素的后代。

const content = element.innerHTML;
element.innerHTML = htmlString;

设置元素的 将会删除所有该元素的后代并以上面给出的 htmlString 替代。

HTMLString中起始位置到终止位置的全部内容,包括HTML标签,同时保留空格和换行。element.innerText也可以改变内容,可以获取HTMLString中起始位置到终止位置的全部内容,不识别HTML标签,同时去掉空格和换行。

如果要向一个元素中插入一段 HTML,而不是替换它的内容,那么请使用 insertAdjacentHTML() 方法。

**Document.createElement()**

在 HTML 文档中,Document.createElement() 方法用于创建一个由标签名称 tagName 指定的 HTML 元素。如果用户代理无法识别 tagName,则会生成一个未知 HTML 元素 HTMLUnknownElement

var element = document.createElement(tagName[, options]);

innerHTML创建多个元素效率更高(不要拼接字符串,采用数组的形式拼接)结构稍微复杂。

//将字符串添加到数组中
var arr=[];
for(var i=0;i<=100;i++){arr.push('百度')
}
//将数组转换为字符串,添加到文档中
inner.innerHTML=arr.join('');

2–增

  • node.appendChild(aChild)
    -node.insertBefore()

node.appendchild(child)添加创建的元素节点.是给父元素下的列表的最后添加类似于css中的::after类似于push

element.appendChild(aChild)

**Node.insertBefore()** 方法在参考节点之前插入一个拥有指定父节点的子节点

node.insertBefore(child,指定元素)

var li=document.createElement('li');
//获取父项
var ul = querySelector('ul');
//添加子项到父项中,后面追加元素 类似于push
ul.appendChild(li);
//添加节点到指定位置的前面
ul.insertBefore(li , child[0])
//两步  1 创建元素  2添加元素

3–删

node.removeChild(child);

删除父节点下的子节点

var ul=document.querySelector('ul');
ul.removeChild(ul.children[0]);//使用时 如果父元素没有了子元素,那么这个属性就会报错
//可以添加判断.在没有时返回null
 <style>* {margin: 0;padding: 0;}body {padding: 100px;}textarea {width: 200px;height: 100px;border: 1px solid pink;outline: none;resize: none;}ul {margin-top: 50px;}li {width: 300px;padding: 5px;background-color: rgb(245, 209, 243);color: red;font-size: 14px;margin: 15px 0;}a {text-decoration: none;color: #eee;font-size: 14px;float: right;}</style>
删除评论<body><textarea name="" id=""></textarea><button>发布</button><ul></ul>
<script>var text = document.querySelector('textarea');var btn = document.querySelector('button');var ul = document.querySelector('ul');btn.onclick = function () {var flag = 0;if (text.value == '') {alert('请输入内容');} else {var li = document.createElement('li');//innerHTML可以读取HTML标签li.innerHTML = text.value + '<a href="javascript:;">删除</a>';// 注意书写时使用驼峰命名法// ul.appendChild(li);ul.insertBefore(li, ul.children[0]);//注意结构的书写位置,应该在生成列表之后获取var as = document.querySelectorAll('a')for (i = 0; i < as.length; i++) {as[i].onclick = function () {// 要删除的是li,需要找他的父元素ul.removeChild(this.parentNode);}}flag = 1;}if (flag = 1) {text.value = '';}}</script>
</body>

4–改

主要修改dom恶元素属性。dom元素的内容、内容、表单的值等

  1. 修改元素属性:src 、href /、title
  2. 修改普通元素的内容: innerHTML、 innerText
  3. 修改表单元素: value 、 type disabled(按钮禁用)
  4. 修改元素的样式:type、 className

5-查

主要获取查询dom的元素

  1. DOM提供的API方法:getElementByIdgetElementsByTagNamegetElententsByClassName
  2. H5 提供的新方法 :document.querySelector()document.querySelectorAll()
  3. 利用节点操作获取元素:node.parentNode(父),children(子),previousElementSibling/nextElementSibling(兄弟)

document.getElementById返回一个匹配特定的ID元素

document.getElementsByTagName返回一个包括所有给定标签名称的元素的HTML集合。整个文件结构都会被搜索,包括根节点。

decoment.getElementsByClassName返回一个包含了所有指定类名的子元素的类数组对象。当在document对象上调用时,会搜索整个DOM文档,包含根节点。你也可以在任意元素上调用getElementsByClassName()方法,它将返回的是以当前元素为根节点,所有指定类名的子元素

document.querySelector()文档对象模型Document引用的**querySelector()**方法返回文档中与指定选择器或选择器组匹配的第一个 Element对象。 如果找不到匹配项,则返回null

var element = document.querySelector(selectors);
//注意是匹配的第一个element对象
var el=document.querSelector('.className'); //匹配类名加‘.’
var el=document.querSelector('#id');//匹配id加‘#’
var el=document.querSelector('li');//匹配HTML标签
//还可以更强大
<div class="user-panel main"><input name="login"></div>;
<script>var el = document.querySelector("div.user-panel.main input[name='login']");
</script>

转义特殊字符

如果要匹配的ID或选择器不符合 CSS 语法(比如不恰当地使用了冒号或者空格),你必须用反斜杠将这些字符转义。由于 JavaScript 中,反斜杠是转义字符,所以当你输入一个文本串时,你必须将它转义两次(一次是为 JavaScript 字符串转义,另一次是为 querySelector 转义.

<div id="foo\bar"></div>
<div id="foo:bar"></div><script>console.log('#foo\bar')               // "#fooar"document.querySelector('#foo\bar')    // 不匹配任何元素console.log('#foo\\bar')              // "#foo\bar"console.log('#foo\\\\bar')            // "#foo\\bar"document.querySelector('#foo\\\\bar') // 匹配第一个divdocument.querySelector('#foo:bar')    // 不匹配任何元素document.querySelector('#foo\\:bar')  // 匹配第二个div
</script>

document.querySelectorAll()返回与指定的选择器组匹配的文档中的元素列表,和querySelector;类似,但这个返回的是一个Nodelist.

node.parentNode//获取最近的父节点、

parentNode.childNodes//返回的是所有子节点的集合,该集合是即时更新的,但是包含元素节点和文本节点等

注意: 如果只想获取元素节点,需要处理一下

var ul =document.querySelector('ul');
for(var i=0;i<ul.length;ul.childNodes.length;i++){if(ul.childNodes[i].noceType == 1){//ul.childNodes[i]是元素节点colose.log(ul.childNodes[i]);}
}

parentNode.children//获取子元素节点。非标准,但大多数浏览器支持

parentNode.firstChild
获取第一个子节点,但是会获取所有的子节点,包括文本节点等parentNode.lastChild获取最后一个子元素节点,同样包括文本节点等
//但是这个有着兼容性的问题,只有IE9+才支持
parentNode.firstElementChild可以获取第一个子元素节点parentNode.firstElementChild可以获取最后一个子元素节点
//最后一个可以很好地使用的
parentNode.children[0];获取第一个子元素节点parentNode.children[parentNode.children.length - 1];获取最后一个子元素节点

复制节点

node.cloneNode();方法返回调用该方法的节点的一个副本.也称为克隆节点

并且该方法需要appendChild配合添加

node.cloneNode();括号里面为空,或者为false,只是浅拷贝.只复制节点本身,不克隆里面的子节点

如果为true,则是深拷贝,会复制里面的节点,以及里面所有的的子节点

Node.nodeType

只读属性 表示的是该节点的类型。**Node.nodeType**

nodeType 属性可用来区分不同类型的节点,比如 元素文本注释

附加一个案例

//表格添加数据(重要)<body><table border="1"><thead><th>姓名</th><th>学科</th><th>成绩</th><th>操作</th></thead><tbody></tbody></table><script>//因为没有学到数据库,只好写个数组来获取数据。var arr = [{name: '溥仪',subject: 'javascript',grade: 100,},{name: '溥修',subject: 'javascript',grade: 89,},{name: '溥浩',subject: 'javascript',grade: 80,},{name: '溥博',subject: 'javascript',grade: 95,}];var tbody = document.querySelector('tbody');for (var i = 0; i < arr.length; i++) {var tr = document.createElement('tr');tbody.appendChild(tr);for (k in arr[i]) {var td = document.createElement('td');//运行一次,添加一个节点td.innerHTML = arr[i][k];tr.appendChild(td);}var td = document.createElement('td');tr.appendChild(td);td.innerHTML = '<a href="javascript:;">删除</a>';var as = document.querySelectorAll('a');//逻辑要清楚啊,这里获取的是所有的afor (var j = 0; j < as.length; j++) {// 这里也是要给所有的a添加属性as[j].onclick = function () {// 注意删除的是a父亲的父亲,tbody.removeChild(this.parentNode.parentNode);}}</body>
<style>table {width: 500px;margin: 100px auto;text-align:center;}thead {height: 40px;background-color: rgb(18, 158, 228);}td {border: rgb(18, 214, 228) 1px solid;height: 40px;}a {text-decoration: none;color: #333;}</style>

个人学习笔记——Javascript基础学习---DOM基础(阶段总结)相关推荐

  1. HTML5学习笔记 —— JavaScript基础知识

    HTML5学习笔记 -- JavaScript基础知识 标签: html5javascriptweb前端 2017-05-11 21:51 883人阅读 评论(0) 收藏 举报 分类: JavaScr ...

  2. JavaScript学习笔记05【高级——DOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  3. JavaScript学习笔记04【高级——DOM和事件的简单学习、BOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  4. 学习笔记(二)——CSS基础

    文章目录 一.什么是CSS 二.CSS基本使用 2.1.行内式(内联样式) 2.2.内部样式 2.3.外部样式 2.3.1.嵌入式 2.3.2.导入式 三.选择器 3.1.基础选择器 3.1.1.标签 ...

  5. Java学习笔记(7)——Java基础之IO多线程网络思维导图

    Java面向对象学习笔记之:包括IO(字节流,字符流,节点流,处理流).线程(线程创建,线程控制,线程同步).网络(TCP Scoket,  UDP Scoket)(全屏观看Java学习笔记(7)-- ...

  6. 深度学习笔记(2) 神经网络基础

    深度学习笔记(2) 神经网络基础 1. 二分类 2. 逻辑回归 3. 逻辑回归的代价函数 4. 梯度下降法 5. 逻辑回归中的梯度下降 6. 简化的代价函数 1. 二分类 逻辑回归是一个用于二分类(b ...

  7. 【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能

    [数据库学习笔记]Day03 - SQL语言基础及数据库定义功能 〇.本文所用数据库表格: 一.关系运算: 关系运算,数学名词,基本运算有两类:一类是传统的集合运算(并.差.交等),另一类是专门的关系 ...

  8. SLAM14讲学习笔记(一) 李群李代数基础

    第二次翻看<视觉SLAM十四讲>,发现第一次看过的都忘记了,认真分析了一下,我认为是第一次学习没有弄清楚整体的脉络.因此这次做一个小小的总结,希望不要再过几天又忘掉.前面的内容就没有总结的 ...

  9. MATLAB学习笔记3:MATLAB编程基础(前半)

    阅读前请注意: 1. 该学习笔记是华中师范大学HelloWorld程序设计协会2021年寒假MATLAB培训的学习记录,是基于培训课堂内容的总结归纳.拓展阅读.博客内容由 @K2SO4钾 撰写.编辑, ...

  10. 【PaddlePaddle学习笔记】从零开始学习图像分类01——图像处理入门基础

    本系列文章链接 [PaddlePaddle学习笔记]从零开始学习图像分类01--图像处理入门基础 未完待续...... 目录 一.关于图像的几个基本概念 1. 像素及其坐标 2. 图像的四种基本类型 ...

最新文章

  1. oracle 导入数据
  2. SQL 语法速成手册
  3. java中哈夫曼编码所用的函数_数据结构(java语言描述)哈夫曼编码
  4. 机器学习在热门微博推荐中的应用
  5. JS日期时间加减实现
  6. 物理学家解说2012
  7. 皮一皮:选第一个选项的人是咋想的?
  8. android WPS如何绘制垂直和水平的直线
  9. 混合云:公共云和私有云之间取得平衡的方式?
  10. highCharts使用中问题总结
  11. Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口
  12. 滴滴滴,测试工程师简历模板分享一波
  13. Java学习之道:Java中十个常见的违规编码
  14. snprintf与sprintf的区别
  15. 大型企业用什么orm_企业信息化系统建设的方案有什么用?
  16. ecshop 实现购物车退出不清空
  17. Hive 窗口函数的使用
  18. UE4打开屏幕键盘/软键盘/虚拟键盘 无法输入中文
  19. matlab几何形状面积计算,小学数学几何图形计算公式总结
  20. 计算机小写换大写函数,Excel函数公式应用:小写数字转换成人民币大写9种方法-excel技巧-电脑技巧收藏家...

热门文章

  1. java ctp行情_javaCtp: java版本期货程序化交易系统,包括行情服务,交易服务会逐步完善...
  2. 统计二叉树中叶子节点的数目(数组实现)
  3. MathJax 基本操作
  4. 在Linux下使用千千静听听音乐
  5. boosting系列算法
  6. garch模型python步骤_利用python进行时间序列分析——从随机游走到GARCH模型(一)...
  7. hive -- stddev , stddev_pop , stddev_samp , var_pop , var_samp(计算方差标准差等)
  8. JavaScript知识结构图
  9. fatal: 无法访问 https://github.com/ :Failed to connect to github.com port 443: 拒绝连接的解决办法
  10. 系统测试准入、准出准则汇总