复习

1、元素内容控制innerHTML:控制双标签的元素内容 可以支持html标签innerText:不支持html标签value:针对表单元素三个属性 直接调用 表示获取元素的值 赋值表示设置
2、元素属性控制1、dom对象调用方法完成:基本上所有的属性都可以控制(自定义属性),布尔属性会存在问题dom对象.getAttribute(属性名称)dom对象.setAttribute(属性名称,值)dom对象.removeAttribute(属性名称)2、dom对象调用属性完成 只能针对标签自带属性可以控制,但是可以解决布尔属性的设置问题dom对象.标签上自带的属性名称
3、样式控制1、获取样式1、dom对象.style.样式名称  只能获取行内2、window.getComputedStyle(dom对象).样式名称2、设置样式dom对象.style.样式名称 = 值

进度条案例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.big {width: 300px;height: 20px;border: 1px solid #eee;}.small {width: 0;height: 20px;background-color: green;}</style>
</head><body><div class="big"><div class="small" style="width: 0px;"></div></div><input type="button" class="start" value="上传"><input type="button" class="stop" value="暂停"><input type="button" class="continue" value="继续"><input type="button" class="zero" value="清空">
</body></html>
<script src="common.js"></script>
<script>/*1、点击上传按钮  定时的修改small的宽度 直到 宽度与big 相同就停止2、点击暂停暂停 停止定时器3、点击继续按钮 定时的修改small的宽度 直到 宽度与big 相同就停止4、点击清空按钮 重置small的宽度 并且停止定时器*/var timer;var smallDom = document.querySelector('.small');var bigDom = document.querySelector('.big');var bigWidth = parseInt(getStyle(bigDom, 'width')); //获取到big的宽度function go() {// timer中如果已经记录了定时器标识 表示正在运行中if (timer) {return}timer = setInterval(function () {//获取small的当前宽度  因为取出的值携带px单位var now = parseInt(getStyle(smallDom, 'width'));if (now >= bigWidth) {clearInterval(timer);} else {smallDom.style.width = now + 5 + 'px'}}, 100)}document.querySelector('.start').onclick = go;document.querySelector('.stop').onclick = function () {clearInterval(timer);// 清除定时器 不是表示timer变量中内容就被清除 还是继续记录着标识。需要重置为0timer = 0;}document.querySelector('.continue').onclick = go;document.querySelector('.zero').onclick = function () {clearInterval(timer);smallDom.style.width = 0;timer = 0;}
</script>

DOM节点操作

dom节点介绍

1、html标签结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDMkp2ph-1660728272840)(img/1660707187375.png)]

2、浏览器对标签的管理方式

由于html标签组成了一种树形结构,浏览器需要管理好这个树形结构。为每一个标签都分配了一个对象(dom对象)

所以dom对象组合到一起也形参了一个树形结构(dom树)

浏览器在解析html页面时,是两棵树(dom对象与样式)的合并最后显示

dom对象属于一种节点

节点类型

<div class="main" id="box">a<!-- 注释内容 -->b<p>content</p>c
</div>
<script>// childNodes 获取到当前节点下所有子节点console.log(document.querySelector('div').childNodes);// attributes 获取当前节点对应的所有属性节点console.log(document.querySelector('div').attributes)
</script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nGs2QR5x-1660728272841)(img/1660708355369.png)]

页面上可以见到的节点包括 文本节点、注释节点、元素节点、属性节点

节点属性

对于页面中每一个信息,都是使用节点对象进行表示(标签元素经常叫做dom对象)。节点对象上就会存在很多的属

性,节点属性就是介绍在不同类型节点中通用属性

<div class="main" id="box">a<!-- 注释内容 -->b<p>content</p>c
</div>
<script>var divDom = document.querySelector('div');var divDomChild = divDom.childNodes;// 获取到所有的属性节点var attrs = divDom.attributes;// console.log(divDomChild)console.log(attrs);// 1、节点类型  nodeTypeconsole.log(divDomChild[0].nodeType);//3  表示文本节点console.log(divDomChild[1].nodeType);//8  表示注释节点console.log(divDomChild[3].nodeType);//1  表示元素节点console.log(attrs[0].nodeType);//2 表示属性节点// 2、节点名称 nodeName(记忆)console.log(divDomChild[0].nodeName);//  #textconsole.log(divDomChild[1].nodeName);//  #commentconsole.log(divDomChild[3].nodeName);//  P  元素节点的名称就是大写的标签名称console.log(attrs[0].nodeName);//class// 3、节点值 nodeValueconsole.log(divDomChild[0].nodeValue);console.log(divDomChild[1].nodeValue);console.log(divDomChild[3].nodeValue);console.log(attrs[0].nodeValue);
</script>

节点获取

获取节点

基础布局

<ul class="main"><li>谢晨雨在线征婚</li><li class="lz">张奥</li><li>江佳佳</li>
</ul>

childNodes(记忆)

var ulDom = document.querySelector('ul');
//1、获取到所有子节点
console.log(ulDom.childNodes);

attributes(记忆)

var ulDom = document.querySelector('ul');
// 2、获取到所有的属性节点  属性节点与元素节点不是父子关系
console.log(ulDom.attributes)

firstChild

var ulDom = document.querySelector('ul');
// 3、firstChild 获取到第一个子节点console.log(ulDom.firstChild)

lastChild

var ulDom = document.querySelector('ul');
// 4、lastChild 获取到最后一个子节点console.log(ulDom.lastChild);

nextSibling

var ulDom = document.querySelector('ul');
// 5、nextSibling 下一个节点// 只要返回的是节点对象 就可以继续向下寻找console.log(ulDom.firstChild.nextSibling.nextSibling.nextSibling)

previousSibling

// 6、previousSibling 上一个节点
console.log(document.querySelector('.lz').previousSibling.previousSibling);

parentElement(记忆)

// 7、parentElement 获取到父级节点console.log(document.querySelector('.lz').parentElement)console.log(document.querySelector('.lz').parentNode)

获取子元素节点

children(记忆)

<ul><li>富婆通讯录</li><li>如何让富婆爱上我</li><li>取悦富婆的方法</li>
</ul>
<script>var ulDom = document.querySelector('ul');// 所有的子元素节点console.log(ulDom.children);// firstElementChild 获取第一个子元素节点console.log(ulDom.firstElementChild);// lastElementChild 获取最后一个子元素节点console.log(ulDom.lastElementChild);// nextElementSibling下一个兄弟元素节点console.log(ulDom.firstElementChild.nextElementSibling);console.log(ulDom.firstElementChild.nextElementSibling.previousElementSibling)
</script>

创建节点

<div class="app"></div>
<button>添加元素</button>
<script>document.querySelector('button').onclick = function(){// 1、创建元素节点a 标签  createElement 可以创建元素节点参数就是节点名称var aDom = document.createElement('a');// 2、创建属性节点var hrefAttr = document.createAttribute('href');// 3、设置属性节点的值hrefAttr.nodeValue = 'http://baidu.com';// 4、设置属性节点修饰元素节点aDom.setAttributeNode(hrefAttr)// 5、创建文本节点  createTextNode创建文本节点var textNode = document.createTextNode('百度');// 6、将文本节点设置为a元素节点的子节点aDom.appendChild(textNode);// 7、将a元素节点设置到dom树上document.querySelector('.app').appendChild(aDom)// document.querySelector('.app').innerHTML = '<a href="http://baidu.com">百度</a>';// 需要记忆createElement  该方法返回的是dom对象 后期可以按照dom的方式进行操作}
</script>

插入节点

1、语法格式

1、dom对象.appendChild(dom对象)appendChild表示添加子元素 调用的dom对象一定是父级元素 参数表示要加入的dom对象
2、dom对象insertBefore()表示将dom对象加入到哪一个元素的前面,调用的dom对象一定是父级元素

2、使用示例

<p>p标签的内容</p><div id="app"><div class="one">内容</div>
</div>
<script>// 1、appendChild// var aDom = document.createElement('a');// aDom.innerHTML = '百度';// aDom.setAttribute('href','http://baidu.com');// document.querySelector('#app').appendChild(aDom)// 如果添加的元素是页面上已经存在的 自动做剪切// document.querySelector('#app').appendChild(document.querySelector('p'))// 2、insertBefore 作用与appendChild 一样 但是是加入到指定元素的前面  父元素dom对象.insertBefore(加入的元素,加入的位置)var aDom = document.createElement('a');aDom.innerHTML = '百度';aDom.setAttribute('href','http://baidu.com');document.querySelector('#app').insertBefore(aDom,document.querySelector('.one'))
</script>

3、使用节点实现添加表格

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>table,table tr th, table tr td { border:1px solid #0094ff; }</style>
</head>
<body><div><input type="text" id="username" /><input type="radio" id="sexOne"  name="sex" value="男"/>男<input type="radio" id="sexTwo" checked name="sex" value="女"/>女<input type="text" id="age" /><button id="add">添加</button></div><br/><table cellspacing="0" border="1" width="600px" ><tr><td>姓名</td><td>性别</td><td>年龄</td></tr></table><script>//页面上输入用户的姓名、性别、年龄 确认后 列表的方式显示添加的数据document.querySelector('#add').onclick = function(){// 获取到页面上输入内容var username = document.querySelector('#username').value;// 获取性别  input[name="sex"]:checked 从所有input中先筛选name值为sex 并且有checked属性的inputvar sex = document.querySelector('input[name="sex"]:checked').value;var age = document.querySelector('#age').value;// 创建tr节点var trDom = document.createElement('tr');// 创建td节点var usernameDom = document.createElement('td');usernameDom.innerHTML = username;// 将td节点加入到tr中trDom.appendChild(usernameDom);var sexDom = document.createElement('td');sexDom.innerHTML = sex;trDom.appendChild(sexDom);var ageDom = document.createElement('td');ageDom.innerHTML = age;trDom.appendChild(ageDom);document.querySelector('tbody').appendChild(trDom)}</script>
</body>
</html>

替换节点

1、语法

父元素的dom对象.replaceChild(新的dom对象,被替换的dom对象)

2、使用示例

<ul><li>aaa</li><li>bbbb</li></ul><button>按钮</button><script>document.querySelector('button').onclick = function(){var liDom = document.createElement('li');liDom.setAttribute('data-index',1);liDom.innerHTML = 'new li 'document.querySelector('ul').replaceChild(liDom,document.querySelector('ul').firstElementChild)}</script>

复制删除节点

<ul><li>11111</li></ul><button>复制</button><button>删除</button><script>document.querySelector('button').onclick = function(){// 只有cloneNode方法 是使用被赋值的元素dom对象调用 返回一个新的dom对象 参数表示是否要复制子节点var newLi = document.querySelector('ul').firstElementChild.cloneNode(true);document.querySelector('ul').appendChild(newLi)}document.querySelectorAll('button')[1].onclick = function(){// 删除节点  父元素的dom对象.removeChild(被删除的dom对象)document.querySelector('ul').removeChild(document.querySelector('ul').firstElementChild)}</script>

节点中需要记忆的

1、childNodes  获取所有的子节点
2、children  获取所有的子元素
3、attributes 获取所有的属性节点
4、document.createElement() 创建元素节点
5、父元素节点.appendChild() 添加节点
6、父元素节点.removeChild()删除节点

获取元素宽高

获取定位偏移量

获取滚动宽高

JavaScript-0817相关推荐

  1. 情人节程序员用HTML网页表白【520爱心背景3D相册】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript

    这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个 ...

  2. 2008年北京奥运会赛程表—— 08-17

    2008年北京奥运会赛程表-- 08-17 查看8月 0809101112131415161718192021222324 日赛程 <script type="text/javascr ...

  3. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  4. 【JavaScript总结】JavaScript语法基础:JS高级语法

    作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...

  5. 【JavaScript总结】JavaScript语法基础:DOM

    ->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...

  6. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  7. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  8. 【JavaScript总结】JavaScript发展与学习内容

    发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...

  9. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

  10. [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

    课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...

最新文章

  1. OSChina 周五乱弹 —— 要作死就勇敢地作!
  2. libsvm学习 all
  3. c语言中管理员信息注册,regsvr32注册控件如果使用管理员身份执行
  4. 我们大家都知道mysql_10个mysql中select语句的简单用法
  5. 2020顶会指南:征稿截止时间、举办地、举办时间一览
  6. 收入超10亿?罗永浩:要真有这个收入 我早就还完债做智能产品去了
  7. java jackson unicode_如何让Jackson JSON生成的数据包含的中文以unicode方式编码
  8. anaconda下安装库出现UnsatisfiableError问题的解决办法
  9. linux中screen命令的用法
  10. Undefined index: submit in的错误处理
  11. 检测网络端口和刷新本地DNS
  12. 探讨手机越狱和安装deb文件的几种方式研究
  13. 爬虫-python(三) 百度搜索关键词后爬取搜索结果
  14. 网站收录提交入口,主动出击加快网站收录
  15. landesk 卸载_LANDesk软件分发在项目中的深入探索(续2)—客户端已安装应用程序的远程卸载...
  16. Androidg 改变CheckBox下的选中与未选中图片
  17. 广义表((a,b),c,d)表头和表尾分别是什么?
  18. 个人股东股权转让涉税问题初探
  19. 提交 Merge Request 申请进行code review
  20. 视源股份笔试之挖个坑我就跳

热门文章

  1. 最小二乘法直线拟合汇总
  2. Texstudio常用快捷键(非常实用)
  3. bilibili 安卓B站缓存视频合并软件 哔哩哔哩 基于ffmpeg
  4. RPC在Python中的使用及原理浅析
  5. 源创媒:360百科词条个人如何创建
  6. C/C++ 二叉树的非递归遍历(前序、中序、后序非递归遍历)
  7. Facebook陷史上最大危机:近7千页机密文件泄露,Libra恐无缘明年推出
  8. 电视监控系统培训教材
  9. 微信小程序跳转的几种方式
  10. SAP中MRP计划期间测试