BOM操作

JavaScript分为 ECMAScript,DOM,BOM。

BOM DOM 都属于javascript

BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”

常用BOM操作

所有浏览器都支持 window 对象。它表示浏览器窗口。

*如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

*没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。

Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先.

所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员

全局变量是 window 对象的属性。

全局函数是 window 对象的方法。

甚至 HTML DOM 的 document 也是 window 对象的属性之一

在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()

window对象的子对象有:

  1. navigator(浏览器对象)
  2. screen(屏幕对象)
  3. history(浏览历史对象)
  4. location(地址对象)
window.open()
打开一个新窗口
window.open('https://www.sogo.com/','','width=800px,left=200px')
以宽800像素,距离屏幕左边200像素 打开一个新窗口 访问sogo网站
window.close()
关闭当前浏览器窗口
navigator.userAgent
标识自己是一个浏览器
/* 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'*/
history.forward()
前进一页 相当于浏览器左上角的前进
history.back()
后退一页 相当于浏览器左上角的回退
window.location.href
获取当前页面所在的网址(返回一个字符串) 也可以再加赋值符号和网址跳转
window.location.href="URL"
例子:location.href='https://www.baidu.com'
通过赋值的方式 跳转到指定页面
window.location.reload()
刷新当前页面

三种弹出框 alert confirm prompt

  1. alert()警告框:



    返回undefined。

  2. confirm()确认框:



    根据不同的选择会得到true或者false:

  3. prompt()提示框:

    输入hello world



    可以获取到输入:



    给弹出框设置默认值:



    如下:

ps:BOM实现:父子页面通信 django后台管理

定时任务 setTimeout

通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。使用settimeout()可以实现此操作。

setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。

setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。

第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。

    let t = setTimeout(showMsg, 3000)  // 3000毫秒之后执行函数
clearTimeout(t) // 取消定时任务 s = setInterval(func, 3000) // 每隔3000毫秒执行一次
clearInterval(s) // 取消循环定时任务

在网页中设置一个弹出框,在你打开网页之后等待3秒之后弹出。

setTimeout(functi on(){alert()},3000)

循环定时 setInterval

在网页中设置一个弹出框,每3秒弹出一次。

setInterval(function(){alert()},3000)

如果不点会一直累加弹出框

取消定时任务 --> 必须要申明变量

let s;
function func(){
alert()
}
s = setInterval(func,1000) // 循环执行func函数
function inner(){
clearInterval(s)
}
setTimeout(inner,3000)
/*
1. clearInterval() 方法可取消由 setInterval() 设置的 timeout。
2. clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。*/

遇到的问题:

DOM操作

DOM树:(顺藤摸瓜)



在 HTML DOM (Document Object Model) 中 , 每一个元素都是 节点:

  1. 文档是一个文档节点。
  2. 所有的HTML元素都是元素节点。
  3. 所有 HTML 属性都是属性节点。
  4. 文本插入到 HTML 元素是文本节点。are text nodes。
  5. 注释是注释节点。

    Document 对象

    当浏览器载入 HTML 文档, 它就会成为 Document 对象。

    Document 对象是 HTML 文档的根节点。

    Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

    提示:Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。

查找标签

"""
1.js中变量名的命名风格推荐是驼峰体
2.js代码查找到的标签如果需要反复使用可以用变量接收 规律 xxxEle
"""

直接查找

document.getElementById('d1')
结果就是标签对象本身 因为同一页面标签的id值是唯一的
document.getElementsByClassName('c1')
结果是数组里面含有多个标签对象
document.getElementsByTagName('span')
结果是数组里面含有多个标签对象
document.getElementsByName("x");
统计有多少个标签的name属性等于x 返回数字

getElementsByName:

间接查找

类似于顺藤摸瓜。

依据你手上的标签对象,去调用下面的方法,查找别的标签:

parentElement             	父节点标签元素
children 所有子标签
firstElementChild 第一个子标签元素
lastElementChild 最后一个子标签元素
nextElementSibling 下一个兄弟标签元素
previousElementSibling 上一个兄弟标签元素 ps:支持连续获取,得到的标签还可以继续调用查找的方法,结果列表不支持负索引。

firstElementChild:

操作节点

创建标签 createElement

let aEle = document.createElement('a'); // 创建空的a标签
aEle.href = 'http://www.baidu.com/' //只能添加默认的属性

操作标签属性 setAttribute

setAttribute()  //使用此方法可以 兼容默认属性和自定义属性
getAttribute("age") //获取标签内容
removeAttribute("age")

getAttribute获取自定义属性值,setAttribute修改:

操作标签文本 innerText innerHTML

aEle.innerText = '这个很攒劲!'

.innerText  		 获取标签内部所有的文本内容
.innerText = '文本' 替换/设置标签内部的文本(不识别标签语法) .innerHTML 获取标签内部所有的标签包含文本
.innerHTML = '文本' 替换/设置标签内部的文本(这个方法能识别标签语法)

innerHTML可以直接修改掉某个标签:



在设置标签的时候 innerText和innerHTML都会将被设置的标签覆盖 只不过innerText是以文本替代 innerHTML可以识别HTML代码,会以HTML代码替代原标签。

添加标签 appendChild

添加标签是间接查找,他要以某个标签为基准添加:

// js代码查找div标签并将a追加到div内部
let divEle = document.getElementsByTagName('div')[0]
divEle.appendChild(aEle)
// 新增一个p标签添加到div标签内部
a = document.createElement('p')
<p>​</p>​
a.innerText='hello world'
'hello world'
div_tag = document.getElementById('url')
<a id=​"url" age=​"100">​点我​</a>​
div_tag.appendChild(a)
<p>​hello world​</p>​
a.innerHTML = '<a href="https://www.baidu.com">点我快点我<\a>'
'<a href="https://www.baidu.com">点我快点我<a>'

注意:这个标签是通过js代码临时创建的,并没有修改HTML文件。如果是a标签点链接跳转之后,再回到原页面,你通过代码生成的a标签就会消失。

获取值操作 value

主要用于获取表单的输入。

1.针对用户输入的和用户选择的标签

标签对象.value

当前页面中是什么值 这个value就会获取到什么值:



对于select标签,查找select 别找option

2.针对用户上传的文件数据

标签对象.files fileList [文件对象、文件对象、文件对象]

标签对象.files[0] 文件对象

对于文件不能使用value方法,而是使用files方法。

尝试使用value会获取一个假路径:



文件对象:

class与css操作

1.js操作标签css样式
标签对象.style.属性名(下划线没有 变成驼峰体)
obj.style.backgroundColor="red"
2.js操作标签class属性
标签对象.classList //获取所有样式类名(字符串)
标签对象.classList.add() //添加样式类
标签对象.classList.contains() //存在某个类则返回true,否则返回false
标签对象.classList.remove() //删除指定类
标签对象.classList.toggle() //指定类存在于标签中就删除,否则添加

事件

事件可以简单的理解为通过js代码给html标签绑定一些自定义的功能

常见事件

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。 // 练习:输入框
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。
onload 一张页面或一幅图像完成加载。
onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。 onselect 在文本框中的文本被选中时发生。
onsubmit 确认按钮被点击,使用的对象是form。

绑定事件的多种方式

    <!--绑定事件的方式1-->  在html标签中绑定事件
<button onclick="showMsg()">快按我</button> <!--绑定事件的方式2--> 通过js代码查找到标签后绑定事件(解耦合)
<input type="button" value="快快快" id="d1"> <script>
function showMsg() {
let msg = prompt('你确定要这样吗?');
console.log(msg)
} let inputEle = document.getElementById('d1');
inputEle.onclick = function () {
alert('谁在那里点我!!!')
}
</script> //ps:1.选择节点 2.给节点添加事件 inputEle.onclick

事件函数中的this关键字

this指代的就是当前被操作的标签对象本身
this的作用:this指代当前被触发事件的标签对象 有点像self 谁触发了这个事件函数,this就是谁(标签)。
如果事件函数内有多层嵌套那么最好在一开始用变量存储一下防止后续变化

onload方法

js代码放在head报错:window.onload 让文档加载完毕之后再运行js
XXX.onload 等待XXX加载完毕之后再执行后面的代码

事件实战案例

// 1.简易搜索框
<input type="text" value="游戏机" id="d1"> <script>
let inputEle = document.getElementById('d1')
inputEle.onfocus = function () {
this.value = ''
}
inputEle.onblur = function () {
this.value = '下次再来哟!'
}
</script> // 2.登录校验用户名
<p>username:
<input type="text" id="d1">
<span style="color: red"></span>
</p>
<p>password:
<input type="text" id="d2">
<span style="color: red"></span>
</p>
<button id="suBtn">提交</button> <script>
// 1.查找提交按钮的标签
subEle = document.getElementById('suBtn')
// 2.给按钮标签绑定点击事件
subEle.onclick = function (){
// 3.查找获取用户输入的标签并获取数据
let userNameEle = document.getElementById('d1')
let passWordEle = document.getElementById('d2')
if(userNameEle.value === 'jason'){
userNameEle.nextElementSibling.innerText = '用户名不能是Jason'
}
if(passWordEle.value === '123'){
passWordEle.nextElementSibling.innerText = '密码不能是123'
}
}
</script> // 3. 省市联动 省:
<select name="" id="d1"> </select> 市:
<select name="" id="d2"> </select>
<script>
let data = {
"河北": ["廊坊市", "邯郸市"],
"北京": ["朝阳区", "海淀区"],
"山东": ["威海市", "烟台市"],
"安徽": ["芜湖市", "合肥市"],
"上海": ["浦东新区", "静安区"]
}
// 提前查找好省和市的select标签
let proSeEle = document.getElementById('d1');
let citySeEle = document.getElementById('d2');
// 1.获取所有的省信息
for (let pro in data) {
// 2.创建option标签
let proOpEle = document.createElement('option');
// 3.添加文本及属性
proOpEle.innerText = pro;
proOpEle.setAttribute('value', pro);
// 4.将创建好的option标签添加到省下拉框中
proSeEle.appendChild(proOpEle)
}
// 5.给省标签绑定文本域变化事件 onchange
proSeEle.onchange = function () {
citySeEle.innerHTML = ''; // 每次操作市之前清空市数据
// 6.获取用户选择的省信息 根据省获取市信息
let targetProData = this.value;
let cityDataList = data[targetProData];
// 7.循环获取每一个市信息 创建option标签 添加到市下拉框中
for (let i = 0; i < cityDataList.length; i++) {
let cityOpEle = document.createElement('option');
cityOpEle.innerText = cityDataList[i];
cityOpEle.setAttribute('value', cityDataList[i]);
citySeEle.appendChild(cityOpEle)
}
}
</script>
/*
每次添加的标签没有清空 只有刷新页面才会清空
每次给市添加标签 都要给市里面的信息进行清空
补充 input标签 placeholder 只要文本框是空的,那文本框的值就是placeholder的属性值
*/

jQuery类库

"""
IE浏览器:前端针对IE有时候需要单独再编写一份代码
"""
jQuery宗旨:Write less, do more 写的更少做的更多 jQuery特点:
1.加载速度快
2.选择器更多更好用
3.一行代码走天下
4.支持ajax请求(重点)
5.兼容多浏览器

推荐使用3.x的jquery:

jQuery下载与配置

jQuery类似python中的模块 由于浏览器默认只认识html css js

不认识jquery 需要要使用需要先导入

官网下载:



或者可以去bootcdn下:https://www.bootcdn.cn/jquery/

准备工作
1.下载核心文件到本地引入(没有网络也可以使用)
<script src="jQuery3.6.js"></script> 2.CDN网络资源加载(必须有网络才可以使用)
https://www.bootcdn.cn/
https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js
https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.min.js # ps:这个min版本是对正常版本进行了压缩处理 将易读的变量名变成很短的变量名
# 降低了可读性 也降低了数据大小

本地配置

直接将jQuery代码复制到本地的js文件中即可:



在head或者body导入:

CDN网络配置

在head或body引用CDN提供的网址即可:



使用F12查看jQuery是否加载成功:

pycharm添加模板

每次都要导入jQuery很麻烦我们可以将其添加到模板:

打开模板设置:



添加模板:

CDN内容分发网络介绍

'''
两个地方的距离特别远,比如国外想访问国内的网址,需要经过海底光缆,
一个请求经过长途跋涉才能达到服务器,访问速度非常慢。
而且还有一个问题,网站的图片视频很难访问。 所以就有一个大型组织CDN,在全国各地建立服务器
可以将这些视频图片交给CDN CDN用服务器保存
然后就近原则分发给用户 而网站要向CDN支付费用。
总的来说就是,CDN帮你保存资源 用户访问时 CDN调最近的服务器帮你提供一部分资源。
'''
# 大型的CDN也会提供一些免费服务。

jQuece基本使用

jQuery导入之后需要使用关键字才可以使用 (用关键字包起来)
jQuery('p') // 会产生jQuery对象
默认的关键字就是jQuery但是不好输入所以会使用符号 >>>: $ jQuery封装了JS代码 让编写更简单 但是有时候JS代码更快 js代码与jQuery代码对比: // 原生js
let pEle = document.getElementsByTagName('p')[0]
undefined
pEle.style.color = 'red'
'red'
pEle.nextElementSibling.style.color = 'green' //jQuery
$('p').first().css('color','yellow').next().css('color','blue')

标签对象与jQuery对象

通过$产生jQuery对象:

  1. 不同的对象能够调用的方法是不同的

    在编写代码的时候一定要看清楚手上是什么对象

  2. 两者可以互相转换

    标签对象转jQuery对象

    $(标签对象)

    ps:标签对象转jquery对象 $(标签) 再用jquery对象的方法!

    jQuery对象转标签对象

    jQuery对象[0]

    ps:把jQuery看成特殊的列表 里面装着一个个标签 用索引就可以将列表中的标签取出来

练习

简易登录校验

<!-- 简易登录校验 -->

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery3.6.1.js"></script> </head>
<body> <form name="login">
username:<input type="text" name="username" value="" id="user"><span style="color: darkred" id="user_span"></span><br>
password:<input type="text" name="password" value="" id="pwd"><span style="color: darkred" id="pwd_span"></span><br>
<button type='button' id="suBtu">提交</button> <!-- button标签不申明type属性的情况下相当于submit -->
</form> <script>
var suBtu = document.getElementById("suBtu")
var userEle = document.getElementById("user")
var pwdEle = document.getElementById("pwd") // 按钮绑定点击事件
suBtu.onclick = function(){
let username = document.getElementById("user")
let password = document.getElementById("pwd")
if (password.value.length < 6){
let pwd_span = document.getElementById("pwd_span")
pwd_span.innerText='密码长度不能小于6'
}
if (username.value.length < 3){
let pwd_span = document.getElementById("user_span")
pwd_span.innerText='用户名长度不能小于3'
}
}
// 文本框绑定聚焦事件
userEle.onfocus = function() {
userEle.nextElementSibling.innerText=''
}
pwdEle.onfocus = function() {
pwdEle.nextElementSibling.innerText=''
} </script>
</body>
</html>

简易页面计时器

<!-- 简易版本页面计时器 -->

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
</head>
<body> <div id="time"> </div>
<button type="button" id="stop">stop</button>
<button type="button" id="start">start</button> <script>
// 获取时分秒
function clock() {
var time = new Date();
var hours = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
document.getElementById("time").innerText = hours + ":" + minutes + ":" +seconds }
let t;
clock_task = setInterval(clock, 1000) // 获取按钮
stopButton = document.getElementById("stop")
stopButton.onclick = function() {
t = null;
clearInterval(clock_task)
} // 获取按钮2
stopButton = document.getElementById("start")
stopButton.onclick = function(){
if (!t){
clock_task = setInterval(clock, 1000)
t = 1;
}
}
</script> </body>
</html>

常用BOM操作 DOM操作 事件 jQuery类库的更多相关文章

  1. 前端javascript之BOM、DOM操作、事件

    BOM与DOM操作 BOM 浏览器对象模型>>>:使用js操作浏览器 DOM 文档对象模型>>>:使用js操作前端页面 window对象 所有浏览器都支持 wind ...

  2. 前端基础之BOM和DOM操作

    目录 BOM和DOM定义 windows对象 windows的子对象 navigator对象 screen对象 history对象 location对象 弹出框 警告框 确认框 提示框 计时相关 se ...

  3. 前端基础之BOM与DOM操作

    目录 BOM操作 navigator对象 screen对象 history对象 localtion对象 弹出框 计时 setTimeout() clearTimeout() setInterval() ...

  4. JS中的函数、BOM和DOM操作

     一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */   // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...

  5. jQuery框架-2.jQuery操作DOM节点与jQuery.ajax方法

    一.jQuery操作DOM 内部插入操作: append(content|fn):向每个匹配的元素内部追加内容. prepend(content):向每个匹配的元素内部前置内容. 外部插入操作: af ...

  6. JavaScript的BOM、DOM操作、节点以及表格(二)

    BOM操作 一.什么是BOM BOM(Browser Object Model)即浏览器对象模型.     BOM提供了独立于内容 而与浏览器窗口进行交互的对象:     BOM由一系列相关的对象构成 ...

  7. js运算符、 流程控制 、函数、内置对象、BOM与DOM操作

    运算符 # 1.算术运算符 var x=10; var res1=x++; '先赋值后自增1' var res2=++x; '先自增1后赋值' # 2.比较运算符 弱等于:自动转换类型 '5' == ...

  8. BOM及DOM及事件

    知识内容: 1.BOM介绍 2.DOM操作 3.事件 参考:http://www.cnblogs.com/liwenzhou/p/8011504.html 入门代码(DOM基本操作与事件): < ...

  9. JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象

       前   言 絮叨絮叨 这里是JS基础知识集中讲解的第三篇,也是最后一篇,三篇JS的基础,大多是知识的罗列,并没有涉及更难得东西,干货满满!看完这一篇后,相信许多正在像我一样正处于初级阶段的同学, ...

  10. BOM和DOM操作

    目录 BOM window对象 window子对象 location 弹出框 计时 history navigator DOM 查找节点 直接查找 间接查找 节点操作 创建节点 添加节点 删除节点 替 ...

随机推荐

  1. 使用logstash读取MySQL数据传输到es,并且@timestamp字段采用MySQL中的字段时间--建议采用这个

    MySQL中数据样式 ES中数据样式 input { jdbc { jdbc_connection_string => "jdbc:mysql://192.168.0.145:3306 ...

  2. 从Spring Cloud微服务视角理解Kubernetes

  3. 前端ES6 面试过关宝典

    ES6 部分 Typescript 部分 前端工程面经(节流防抖.https.前端攻击.性能优化...) https://juejin.cn/post/6844903734464495623 ES6面 ...

  4. MySQL用户也可以是个角色

    前言 角色(Role),可以认为是一些权限的集合,一直是存在各个数据库中,比如Oracle.SQL Server.OceanBase等,MySQL 自从 8.0 release 才引入角色这个概念. ...

  5. 洛谷P1884 [USACO12FEB]Overplanting S (矩形切割)

    一种矩形切割的做法: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const in ...

  6. Oracle索引和事务

    1. 什么是索引?有什么用? 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录.在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即 ...

  7. 华为路由器vrrp(虚拟路由器冗余协议)基本配置命令

    vrrp(虚拟路由器冗余协议)基本配置 int g0/0/0 vrrp vrid 1 virtual-ip 172.16.1.254 创建VRRP备份组,备份组号为1,配置虚拟IP为172.16.1. ...

  8. C语言实现扫雷游戏(完整版)

    头文件定义.函数声明 下面就是扫雷中使用到的所有函数,为了省事我把所有的代码都放在一个C文件中实现 宏定义中设置了游戏的界面布局,以及设置地雷的个数(这里默认的是10个地雷),界面是一个9*9的方格布 ...

  9. SDOI2017树点染色

    题目链接 发现1操作很像lct中的access,然后它每次染的又是一个新颜色,因此同一个颜色就在同一颗splay里了,且一个点到根的权值val[i]也就是到根路径上虚边的个数,然后看access时会对 ...

  10. Ubuntu安装错误 server64 busybox-initramfs安装失败

    因为想试试在Linux系统上爆破 所以安装了一下Ubuntu.第一次安装包报了个server64 busybox-initramfs.在安装系统那边.我一直还以为是我磁盘分配错了. 后来在网上找了资料 ...