当前位置: 首页 > article >正文

javascript中Cookie、BOM、DOM的使用

Cookie

在客户端存储小型文本数据(通常 ≤ 4KB),常用于会话管理、个性化设置等场景。

名称描述作用生命周期存储位置安全性
会话 Cookie临时存储,浏览器关闭后自动删除会话管理、个性化设置浏览器关闭内存
持久 Cookie设置过期时间,长期保存在硬盘免登录、用户偏好设置过期时间硬盘
第三方 Cookie由非当前访问网站设置跨站行为追踪浏览器关闭硬盘
  • 默认情况下的cookie是内存cookie,也称之为会话cookie,也就是在浏览器关闭时会自动被删除
  • 如果想要设置持久cookie,需要设置过期时间,或者设置为永久cookie,也就是在浏览器关闭时不会自动被删除
  • 我们可以通过设置expires或者max-age来设置过期的时间,单位为秒,例如expires=Thu, 01 Jan 1970 00:00:00 GMT,或者max-age=0,这样就会设置为永久cookie
    • expires:设置的是Date.toUTCString(),设置格式是;expires=date-in-GMTString-format;
    • max-age:设置过期的秒钟,;max-age=max-age-in-seconds (例如一年为606024*365);
  • 我们也可以通过设置domain来设置cookie的作用域,例如domain=example.com,这样就会设置为example.com的子域也可以访问到这个cookie
  • 我们也可以通过设置path来设置cookie的路径,例如path=/,这样就会设置为根路径下的所有页面都可以访问到这个cookie
  • 我们也可以通过设置secure来设置cookie的安全性,例如secure=true,这样就会设置为只有https协议才可以访问到这个cookie
  • 我们也可以通过设置httponly来设置cookie的安全性,例如httponly=true,这样就会设置为只有http协议才可以访问到这个cookie
  • 我们也可以通过设置samesite来设置cookie的安全性,例如samesite=strict,这样就会设置为只有同源的请求才可以访问到这个cookie
// 设置 Cookie(键值对 + 属性)
document.cookie = "username=John; expires=Fri, 31 Dec 2024 12:00:00 UTC; path=/";// 读取所有 Cookie
const cookies = document.cookie; // 返回 "cookie1=value; cookie2=value"// 删除 Cookie(设置过期时间为过去)/ 关闭会话时会自动删除
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
BOM

BOM(Browser Object Model)是指浏览器对象模型,它提供了与浏览器交互的接口和对象。BOM 主要包括以下几个部分:

  • Window 对象:表示浏览器窗口,是最顶层的对象。
    代表浏览器窗口本身,是 BOM 的顶层对象,其他组件(如 location、history)均为其子属性
  • 包含大量的属性,localStorage、console、location、history、screenX、scrollX等等
  • 包含大量的方法,alert、close、scrollTo、open等等;
  • 包含大量的事件,focus、blur、load、hashchange等等;
  • 包含从EventTarget继承过来的方法,addEventListener、removeEventListener、dispatchEvent方法
    MDN-window: window
// 获取当前窗口的宽度和高度
const windowWidth = window.innerWidth;
const windowHeight = window.innerHeight;// 1.常见的属性
console.log(window.screenX)
console.log(window.screenY)window.addEventListener("scroll", () => {console.log(window.scrollX, window.scrollY)
})console.log(window.outerHeight)
console.log(window.innerHeight)//2.常见的方法
const scrollBtn = document.querySelector("#scroll")
scrollBtn.onclick = function() {// 1.scrollTowindow.scrollTo({ top: 2000 })// 2.closewindow.close()// 3.openwindow.open("http://www.baidu.com", "_self")// 4.调整窗口大小window.resizeTo(800, 600); // 5.alertwindow.alert("hello")// 6.confirmconst result = window.confirm("你确定要删除吗?")if (result) {console.log("用户点击了确定") }  // 7.promptconst name = window.prompt("请输入你的名字:", "张三")console.log(name)}// 3.常见的事件
window.onload = function() {console.log("window窗口加载完毕~")
}window.onfocus = function() {console.log("window窗口获取焦点~")
}window.onblur = function() {console.log("window窗口失去焦点~")
}const hashChangeBtn = document.querySelector("#hashchange")
hashChangeBtn.onclick = function() {location.hash = "aaaa"
}
window.onhashchange = function() {console.log("hash发生了改变")
}
  • Navigator 对象:提供浏览器的信息,如用户代理、平台等。
// 获取浏览器的名称和版本
const browserName = navigator.appName;
const browserVersion = navigator.appVersion;// 获取用户代理字符串
const userAgent = navigator.userAgent;// 检查浏览器是否支持某个功能
const isGeolocationSupported = navigator.geolocation;// 检查浏览器是否支持某种媒体类型
const isVideoSupported = navigator.canPlayType("video/mp4");// 检查浏览器是否可以使用摄像头
const isCameraSupported = navigator.mediaDevices.getUserMedia({ video: true });
  • Location 对象:表示当前页面的 URL 信息,如路径、查询参数等。
// 获取当前页面的 URL
const currentURL = location.href;// 获取当前页面的路径
const currentPath = location.pathname;// 获取当前页面的查询参数
const queryParams = location.search;
// 1.属性
// href: 当前window对应的超链接URL, 整个URL;
// protocol: 当前的协议;
// host: 主机地址;
// hostname: 主机地址(不带端口);
// port: 端口;
// pathname: 路径;
// search: 查询字符串;
// hash: 哈希值;
// username:URL中的username(很多浏览器已经禁用);ppassword:URL中的password(很多浏览器已经禁用)// 2.location有如下常用的方法:
// assign:赋值一个新的URL,并且跳转到该URL中;
// replace:打开一个新的URL,并且跳转到该URL中(不同的是不会在浏览记录中留下之前的记录);
// reload:重新加载页面,可以传入一个Boolean类型
// 几个方法
// location.assign("http://www.baidu.com")
// location.href = "http://www.baidu.com"// location.replace("http://www.baidu.com")
// location.reload(false)
  • History 对象:表示浏览器的历史记录,允许访问和操作历史记录。
// 前进
history.forward();// 后退
history.back();// 前进或后退指定的步数
history.go(2); // 前进两步
history.go(-2); // 后退两步// 监听历史记录变化
window.onpopstate = function(event) {console.log("历史记录发生了变化");
};
//1.属性
// length:返回历史记录的长度;
// state:返回当前页面的状态对象;
// 2.方法
// back():返回上一页,等价于history.go(-1);
// forward():前进下一页,等价于history.go(1);
// go():加载历史中的某一页;
// pushState():打开一个指定的地址;  // 跳转(不刷新网页)
// replaceState():打开一个新的地址,并且使用replace
  • Screen 对象:提供关于用户屏幕的信息,如分辨率、颜色深度等。
// 获取屏幕的宽度和高度
const screenWidth = screen.width;
const screenHeight = screen.height;// 获取屏幕的颜色深度
const colorDepth = screen.colorDepth;// 获取屏幕的可用宽度和高度
const availableWidth = screen.availWidth;
const availableHeight = screen.availHeight;
// 获取屏幕的像素密度
const pixelRatio = window.devicePixelRatio;// 获取屏幕的方向
const orientation = screen.orientation.type;// 获取屏幕的设备像素比
const devicePixelRatio = window.devicePixelRatio;// 获取屏幕的像素比
const pixelRatio = window.devicePixelRatio;// 获取屏幕的可用宽度和高度
const availableWidth = screen.availWidth;
const availableHeight = screen.availHeight;
  • 其他对象:如 XMLHttpRequest、XMLDocument 等,用于处理 XML 数据和网络请求。

BOM 提供了丰富的方法和属性,用于与浏览器进行交互,例如打开新窗口、导航、获取用户输入等。

DOM

DOM 是浏览器提供的一个接口,用于操作 HTML 文档的结构和内容。DOM 提供了一组对象和方法,用于访问和修改 HTML 文档的元素、属性和内容。

DOM 提供了以下几个主要的对象:

document.addEventListener("click", () => {console.log("document被点击")
})const divEl = document.querySelector("#box")
const spanEl = document.querySelector(".content")divEl.addEventListener("click", () => {console.log("div元素被点击")
})spanEl.addEventListener("click", () => {console.log("span元素被点击")
})
  • Document 对象:表示整个 HTML 文档,是 DOM 的入口点。
// 常见的属性
console.log(document.body)
console.log(document.title)
document.title = "Hello World"console.log(document.head)
console.log(document.children[0])console.log(window.location)
console.log(document.location)
console.log(window.location === document.location)// 常见的方法
// 创建元素
const imageEl = document.createElement("img")
const imageEl2 = new HTMLImageElement()//   <div id="box" class="abc sumu" age="18">
//     <span name="title" class="content">span元素</span>
//     <!-- 哈哈哈 -->
//     <strong></strong>
//     <a href="#"></a>
//   </div>
//   <div></div>//   <h2 name="title">标题</h2>
//   <button>切换标题</button>
// 获取元素
const divEl1 = document.getElementById("box")
const divEl2 = document.getElementsByTagName("div")
const divEl3 = document.getElementsByName("title")
const divEl4 = document.querySelector(".content")
const divEl5 = document.querySelectorAll(".content")
  • Element 对象:表示 HTML 文档中的元素,可以通过 Document 对象获取。
const divEl = document.querySelector("#box")// 常见的属性
console.log(divEl.id)
console.log(divEl.tagName)
console.log(divEl.children)
console.log(divEl.className)
console.log(divEl.classList)
console.log(divEl.clientWidth)
console.log(divEl.clientHeight)
console.log(divEl.offsetLeft)
console.log(divEl.offsetTop)// 常见的方法
const value = divEl.getAttribute("age")
console.log(value)
divEl.setAttribute("height", 1.88)
  • Node 对象:表示 HTML 文档中的节点,可以通过 Document 对象获取。
const divEl = document.querySelector("#box")
const spanEl = document.querySelector(".content")// 常见的属性
console.log(divEl.nodeName, spanEl.nodeName)
console.log(divEl.nodeType, spanEl.nodeType)
console.log(divEl.nodeValue, spanEl.nodeValue)// childNodes
const spanChildNodes = spanEl.childNodes
const textNode = spanChildNodes[0]
console.log(textNode.nodeValue)// 常见的方法
const strongEl = document.createElement("strong")
strongEl.textContent = "我是strong元素"
divEl.appendChild(strongEl)// 注意事项: document对象
document.body.appendChild(strongEl)

阻止冒泡 、阻止默认行为

  • event.stopPropagation():阻止事件向父元素传播,但不影响默认行为,点击按钮时阻止父元素触发事件
document.getElementById("child").addEventListener("click", (e) => {e.stopPropagation(); // 阻止冒泡console.log("子元素事件触发");
});
  • ​​event.preventDefault()
    取消浏览器默认行为(如阻止表单提交、链接跳转),但不阻止事件冒泡,阻止链接跳转
document.querySelector("a").addEventListener("click", (e) => {e.preventDefault(); // 阻止跳转console.log("链接点击被拦截");
});
  • return false(有限制)
    在 DOM0 级事件模型(如 onclick 属性)中可同时阻止冒泡和默认行为,在 addEventListener 中无效,仅适用于内联事件处理
document.getElementById("child").onclick = function (e) {e.preventDefault(); // 阻止跳转console.log("子元素事件触发");return false; // 阻止冒泡  
}<a href="#" onclick="return false;">点击</a>

相关文章:

javascript中Cookie、BOM、DOM的使用

Cookie 在客户端存储小型文本数据&#xff08;通常 ≤ 4KB&#xff09;&#xff0c;常用于会话管理、个性化设置等场景。 名称描述作用生命周期存储位置安全性会话 Cookie临时存储&#xff0c;浏览器关闭后自动删除会话管理、个性化设置浏览器关闭内存高持久 Cookie设置过期时…...

IDEA 中 Undo Commit,Revert Commit,Drop Commit区别

一、Undo Commit 适用情况&#xff1a;代码修改完了&#xff0c;已经Commit了&#xff0c;但是还未push&#xff0c;然后发现还有地方需要修改&#xff0c;但是又不想增加一个新的Commit记录。这时可以进行Undo Commit&#xff0c;修改后再重新Commit。如果已经进行了Push&…...

DAY43打卡

浙大疏锦行 kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 fruit_cnn_project/ ├─ data/ # 存放数据集&#xff08;需手动创建&#xff0c;后续放入图片&#xff09; │ ├─ train/ …...

Leetcode 1892. 页面推荐Ⅱ

1.题目基本信息 1.1.题目描述 表&#xff1a; Friendship ---------------------- | Column Name | Type | ---------------------- | user1_id | int | | user2_id | int | ---------------------- (user1_id,user2_id) 是 Friendship 表的主键(具有唯一值的列的组合…...

进程——环境变量及程序地址空间

目录 环境变量 概念 补充&#xff1a;命令行参数 引入 其它环境变量 理解 程序地址空间 引入 理解 虚拟地址存在意义 环境变量 概念 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。打个比方&#xff0c;就像你布置房间&#xff0c;这些参数就类…...

(4-point Likert scale)4 点李克特量表是什么

文章目录 4-point Likert scale 定义4-point Likert scale 的构成4-point Likert scale 的特点4-point Likert scale 的应用场景 4-point Likert scale 定义 4-point Likert scale&#xff08;4 点李克特量表&#xff09;是一种常用的心理测量量表&#xff0c;由美国社会心理学…...

亚矩阵云手机实测体验:稳定流畅背后的技术逻辑​

最近在测试一款云手机服务时&#xff0c;发现亚矩阵的表现出乎意料地稳定。作为一个经常需要多设备协作的开发者&#xff0c;我对云手机的性能、延迟和稳定性要求比较高。经过一段时间的体验&#xff0c;分享一下真实感受&#xff0c;避免大家踩坑。 ​​1. 云手机能解决什么问…...

VR视频制作有哪些流程?

VR视频制作流程知识 VR视频制作&#xff0c;作为融合了创意与技术的复杂制作过程&#xff0c;涵盖从初步策划到最终呈现的多个环节。在这个过程中&#xff0c;我们可以结合众趣科技的产品&#xff0c;解析每一环节的实现与优化&#xff0c;揭示背后的奥秘。 VR视频制作有哪些…...

NodeJS全栈WEB3面试题——P2智能合约与 Solidity

2.1 简述 Solidity 的数据类型、作用域、函数修饰符。 数据类型&#xff1a; 值类型&#xff08;Value Types&#xff09;&#xff1a;uint, int, bool, address, bytes1 到 bytes32, enum 引用类型&#xff08;Reference Types&#xff09;&#xff1a;array, struct, mappin…...

某水表量每15分钟一报,然后某天示数清0了,重新报示值了 ,如何写sql 计算每日水量

要计算每日电量&#xff0c;需处理电表清零的情况。以下是针对不同数据库的解决方案&#xff1a; 方法思路 识别清零点&#xff1a;通过比较当前值与前一个值&#xff0c;若当前值明显变小&#xff08;如小于前值的10%&#xff09;&#xff0c;则视为清零。分段累计&#xff…...

Ubuntu 系统部署 MySQL 入门篇

一、安装 MySQL 1.1 更新软件包 在终端中执行以下命令&#xff0c;更新系统软件包列表&#xff0c;确保安装的是最新版本的软件&#xff1a; sudo apt update 1.2 安装 MySQL 执行以下命令安装 MySQL 服务端&#xff1a; sudo apt install mysql-server 在安装过程中&…...

【MATLAB代码】制导——平行接近法,三维,目标是运动的,订阅专栏后可直接查看MATLAB源代码

文章目录 运行结果简介代码功能概述运行结果核心模块解析代码特性与优势MATLAB例程代码调整说明相关公式视线角速率约束相对运动学方程导引律加速度指令运动学更新方程拦截条件判定运行结果 运行演示视频: 三维平行接近法导引运行演示 简介 代码功能概述 本代码实现了三维空…...

大模型安全测试报告:千问、GPT 全系列、豆包、Claude 表现优异,DeepSeek、Grok-3 与 Kimi 存在安全隐患

大模型安全测试报告&#xff1a;千问、GPT 全系列、豆包、Claude 表现优异&#xff0c;DeepSeek、Grok-3 与 Kimi 存在安全隐患 引言 随着生成式人工智能技术的快速演进&#xff0c;大语言模型&#xff08;LLM&#xff09;正在广泛应用于企业服务、政务系统、教育平台、金融风…...

vue3 按钮级别权限控制

在Vue 3中实现按钮级别的权限控制&#xff0c;可以通过多种方式实现。这里我将介绍几种常见的方法&#xff1a; 方法1&#xff1a;使用Vue 3的Composition API 在Vue 3中&#xff0c;你可以使用Composition API来创建一个可复用的逻辑来处理权限控制。 创建权限控制逻辑 首…...

vue3子组件获取并修改父组件的值

在子组件中&#xff0c;父组件传递来的 prop 是只读的&#xff0c;但是确实有修改的需求&#xff0c;故此做个小小研究 // 父组件使用模版&#xff1a;update:xxx"dialogVisible $event" // 子组件使用模版 // const emits defineEmits([update:xxx]); // emits(u…...

【Redis】Cluster集群

目录 1、背景2、核心特性【1】数据分片【2】高可用【3】去中心化【4】客户端重定向 3、集群架构【1】最小规模【2】节点角色【3】通信协议 4、数据分片与路由【1】哈希槽分配【2】客户端路由逻辑 5、故障恢复6、适用场景 1、背景 Redis Cluster是Redis官方提供的分布式解决方案…...

黑马Java面试笔记之 微服务篇(SpringCloud)

一. SpringCloud 5大组件 SpringCloud 5大组件有哪些&#xff1f; 总结 五大件分别有&#xff1a; Eureka&#xff1a;注册中心Ribbon&#xff1a;负载均衡Feign&#xff1a;远程调用Hystrix&#xff1a;服务熔断Zuul/Gateway&#xff1a;网关 如果项目用到了阿里巴巴&#xff…...

CLIP多模态大模型的优势及其在边缘计算中的应用

CLIP多模态大模型的优势及其在边缘计算中的应用 CLIP&#xff08;Contrastive Language-Image Pre-training&#xff09;模型&#xff0c;是OpenAI开发的一种多模态大模型。该模型通过对比学习的方式&#xff0c;在大规模图像-文本对上进行预训练&#xff0c;成功实现了图像和文…...

基于STM32语音识别柔光台灯

基于STM32语音识别柔光台灯 &#xff08;程序&#xff0b;原理图&#xff0b;PCB&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 基于语音识别的智能LED柔光台灯设计&#xff0c;主要包括语音识别模块应用&#xff0c;PWM波控制LED柔光灯的亮度&#xff0c…...

基于PSO粒子群优化的VMD-GRU时间序列预测算法matlab仿真

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 6.1变分模态分解&#xff08;VMD&#xff09; 6.2 门控循环单元&#xff08;GRU&#xff09; 6.3 粒子群优化&#xff08;PSO&#xff09; 7.参考文献 8.算法完…...

探索未知惊喜,盲盒抽卡机小程序系统开发新启航

在消费市场不断追求新鲜感与惊喜体验的当下&#xff0c;盲盒抽卡机以其独特的魅力&#xff0c;迅速成为众多消费者热衷的娱乐与消费方式。我们紧跟这一潮流趋势&#xff0c;专注于盲盒抽卡机小程序系统的开发&#xff0c;致力于为商家和用户打造一个充满趣味与惊喜的数字化平台…...

基于开源AI大模型与AI智能名片的S2B2C商城小程序源码优化:企业成本管理与获客留存的新范式

摘要&#xff1a;本文以企业成本管理的两大核心——外部成本与内部成本为切入点&#xff0c;结合开源AI大模型、AI智能名片及S2B2C商城小程序源码技术&#xff0c;构建了企业数字化转型的“技术-成本-运营”三维模型。研究结果表明&#xff0c;通过AI智能名片实现获客留存效率提…...

Python----目标检测(YOLO简介)

一、 YOLO简介 [YOLO](You Only Look Once&#xff09;是一种流行的物体检测和图像分割模型&#xff0c; 由华盛顿大学的约瑟夫-雷德蒙&#xff08;Joseph Redmon&#xff09;和阿里-法哈迪&#xff08;Ali Farhadi&#xff09;开发&#xff0c;YOLO 于 2015 年推出&#xff0c…...

mysql+keepalived

文章目录 一、master1创建目录写入配置文件启动master1创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position二、master2创建目录写入配置文件启动master2创建 `slave` 用户并授权获取主节点当前 `binary log` 文件名和位置position三、配置主主复制Maste…...

Profinet 协议 IO-Link 主站网关(三格电子)

一、产品概述 1.1 产品用途 SG-PN-IOL-8A-001 网关是 Profinet 从转 IO-Link 主的网关设备 &#xff0c;可以将 IO-Link 从站设备接入 Profinet 系统&#xff0c;通过该网关可实现传感器及驱动器与控制 器之间的信息交互。网关有两个百兆网口和 8 个 IO-Link 端口&#xff0c;两…...

Ubuntu22.04 安装 Miniconda3

Conda 是一个开源的包管理系统和环境管理系统&#xff0c;可用于 Python 环境管理。 Miniconda 是一个轻量级的 Conda 发行版。Miniconda 包含了 Conda、Python和一些基本包&#xff0c;是 Anaconda 的精简版本。 1.下载安装脚本 在 conda官网 找到需要的安装版本&#xff0…...

Hubstudio浏览器如何使用Loongproxy?

1. 使用软件 1.1 Loongproxy 1. 顶级ISP资源&#xff1a;Loongproxy是神龙云旗下品牌&#xff0c;依托与全球领先ISP运营商的深度合作&#xff0c;Loongproxy 精选全球优质静态住宅IP资源。 2. IP池庞大&#xff1a;覆盖 100 国家/地区&#xff0c;构建庞大的 70 万 静态IP池…...

硬件工程师笔记——555定时器应用Multisim电路仿真实验汇总

目录 一 555定时器基础知识 二、引脚功能 三、工作模式 1. 单稳态模式: 2. 双稳态模式(需要外部电路辅助): 3. 无稳态模式(多谐振荡器): 4. 可控脉冲宽度调制(PWM)模式: 四、典型应用 五、优点 二 555无稳态触发器 三 555单稳态触发器 四 555双稳态触发器…...

ComfyUI 对图片进行放大的不同方法

本篇里 ComfyUI Wiki将讲解 ComfyUI 中几种基础的放大图片的办法,我们时常会因为设备性能问题,不能一次性生成大尺寸的图片,通常会先生成小尺寸的图像然后再进行放大。 不同的放大图片方法有不同的特点,以下是本篇教程将会涉及的方法: 像素重新采样SD 二次采样放大使用放…...

Elasticsearch最新入门教程

文章目录 Elasticsearch最新入门教程1.Elasticsearch安装2.Kibana安装3.Elasticsearch关键概念4.SpringBoot整合Elasticsearch4.1 导入Elasticsearch数据4.2 创建SpringBoot项目4.3 修改pom.xml文件4.4 创建es实体类4.5 创建es的查询接口 5.DSL语句5.1 无条件查询5.2 指定返回的…...