JavaScript-0817
复习
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相关推荐
- 情人节程序员用HTML网页表白【520爱心背景3D相册】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看. 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个 ...
- 2008年北京奥运会赛程表—— 08-17
2008年北京奥运会赛程表-- 08-17 查看8月 0809101112131415161718192021222324 日赛程 <script type="text/javascr ...
- 【AJAX】JavaScript的面向对象
Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...
- 【JavaScript总结】JavaScript语法基础:JS高级语法
作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...
- 【JavaScript总结】JavaScript语法基础:DOM
->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- 【JavaScript总结】JavaScript发展与学习内容
发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...
- Python:模拟登录、点击和执行 JavaScript 语句案例
案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...
- [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)
课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...
最新文章
- OSChina 周五乱弹 —— 要作死就勇敢地作!
- libsvm学习 all
- c语言中管理员信息注册,regsvr32注册控件如果使用管理员身份执行
- 我们大家都知道mysql_10个mysql中select语句的简单用法
- 2020顶会指南:征稿截止时间、举办地、举办时间一览
- 收入超10亿?罗永浩:要真有这个收入 我早就还完债做智能产品去了
- java jackson unicode_如何让Jackson JSON生成的数据包含的中文以unicode方式编码
- anaconda下安装库出现UnsatisfiableError问题的解决办法
- linux中screen命令的用法
- Undefined index: submit in的错误处理
- 检测网络端口和刷新本地DNS
- 探讨手机越狱和安装deb文件的几种方式研究
- 爬虫-python(三) 百度搜索关键词后爬取搜索结果
- 网站收录提交入口,主动出击加快网站收录
- landesk 卸载_LANDesk软件分发在项目中的深入探索(续2)—客户端已安装应用程序的远程卸载...
- Androidg 改变CheckBox下的选中与未选中图片
- 广义表((a,b),c,d)表头和表尾分别是什么?
- 个人股东股权转让涉税问题初探
- 提交 Merge Request 申请进行code review
- 视源股份笔试之挖个坑我就跳