JavaScript 入门指南(三)BOM 对象和 DOM 对象

BOM 对象

BOM 简介

  • BOM(browser Object Model)即浏览器对象模型
  • BOM 由一系列对象组成,是访问、控制、修改浏览器的属性的方法
  • BOM 没有统一的标准(每种客户端都可以自定标准)。
  • BOM 的顶层是 window 对象

window 对象

window 对象表示浏览器中打开的窗口。

使用 window 对象中的属性和方法,可以省略对象名,直接写方法名和对象名

  • 属性

    • location :当前 URL 的信息
    • history :客户访问过的 URL 的信息
    • screen :客户端的屏幕信息
    • navigator :浏览器基本信息
    • document :文档对象
  • 函数

    弹框

    // 提示框(显示带有一段消息和一个确认按钮的警告框)
    alert(提示信息);
    // 确认框(显示带有一段消息以及确认按钮和取消按钮的对话框)。点击确定,返回true;点击取消,返回false
    confirm(提示信息);
    // 输入框(显示可提示用户输入的对话框)。点击确定,返回输入的内容;点击取消,返回null
    prompt(提示信息);
    

    浏览器窗口

    // 打开一个新的浏览器窗口或查找一个已命名的窗口
    open(网址)
    // 关闭浏览器窗口
    close()
    

    定时器

    // 执行一次的定时器
    setTimeout(函数, 毫秒值); 
    // 反复执行的定时器
    setInterval(函数, 毫秒值); 
    // 参数:
    //    函数:定义一个有名函数,传递函数名字,或者使用匿名函数
    //    毫秒值:设置定时器的时间,在指定的时间结束之后,会执行传递的函数
    //    返回值:返回的是定时器的 id 值,可以用于取消定时器使用// 取消执行一次的定时器
    clearTimeout(定时器的id值);
    // 取消反复执行的定时器
    clearInterval(定时器的id值);
    

    示例:

    var timeId = setTimeout(function () {alert("c4爆炸了!");
    }, 5000);
    //alert(timeId);	// 2function butOnclick() {// 取消执行一次的定时器cl
    }
    

location 对象

Location 对象包含有关当前 URL(浏览器的地址)的信息。

  • 属性:

    • href :获取当前浏览器的url地址

      href = “新的url地址” : 跳转页面,相当于在浏览器地址栏中输入了地址,并且敲击回车(打开页面)

    • hostname :主机名

    • port :端口名
    • host :主机名+端口名
  • 方法

    • reload() :重新加载当前文档。 刷新页面

web 存储

  • HTML5 为 JS 增加了两个可以存储数据的对象

    • localStorage :本地存储,永久存储数据,作用域:所有页面永久访问
    • sessionStorage :会话存储,临时存储数据,作用域:一次会话(连续跳转的几个页面)
  • 不管是 localStorage,还是 sessionStorage,可使用的 API 都相同

    常用函数(以 localStorage 为例):

    • setItem(key, value) :存储一个数据
    • getItem(key) :获取一个数据
    • removeItem(key) :删除一个数据
    • clear() :清除所有数据

history 对象

History 对象包含用户(在浏览器窗口中)访问过的 URL。

History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问。

函数

  • back() :后退到前一个页面(加载 history 列表中的前一个 URL)
  • forward() :前进到后一个页面(加载 history 列表中的下一个 URL)
  • go(n) :直接前进到第 n 个页面
  • go(-n) :直接后退到第 n 个页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>history对象</title><script>//创建鼠标点击事件的响应函数function goBack() {window.history.back();}function goForward() {window.history.forward();}</script>
</head>
<body><input type="button" value="上一步" onclick="goBack()"/><input type="button" value="下一步" onclick="goForward()"/><a href="04_history对象.html">跳转到04_history对象.html</a>
</body>
</html>

screen 对象

Screen 对象包含有关客户端显示屏幕的信息。

screen 对象中的属性,可以通过 screen.属性名 直接使用

属性

  • height :返回显示屏幕的高度(像素)
  • width :返回显示器屏幕的宽度(像素)

navigator 对象

navigator 对象包含有关浏览器的信息。

navigator 对象中的属性,可以通过 navigator.属性名 直接使用

属性

  • appName :返回浏览器的名称
  • appVersion :返回浏览器的平台和版本信息
  • userAgent :浏览器类型

超链接与表单的跳转控制

  • 超链接和表单都可以进行跳转。跳转属于它们的默认功能。

  • 一般在它们触发的一个事件中,可以通过返回 false,来阻止他们的跳转!

    <br />function fun5(){alert('超链接被点击了!');return false;
    }function f() {alert("阻止表单提交");return false;
    }<a href="https://www.baidu.com" onclick="return fun5()">超链接</a>
    //阻止提交
    <a href="javascript:void(0)">我是超链接</a><form action="http://www.baidu.com" onsubmit="return f()"><input type="submit">
    </form>
    

DOM 对象

DOM 是 document object model,也就是文档对象模型。

可以将 HTML 页面看做一个文档,在 js 眼中就是一个 document 对象。

这个 document 对象中就包含了页面中的所有元素。

DOM 中的节点分类:

  • 元素节点(element node)
  • 属性节点(attribute node)
  • 文本节点(text node)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


dom 获取元素

  • 方式1:es6 提供了强大的根据 CSS 选择器获取元素的接口(推荐)

    // 根据css选择器获取一个元素
    document.querySelector(CSS选择器)
    // 根据css选择器获取元素对象数组集合
    document.querySelectorAll(CSS选择器)
    
  • 方式2:es5 提供的获取元素的接口

    // 根据 id 获取一个元素:
    document.getElementById(ID)  	// 等价于es6的 querySelector(#ID)
    // 根据 class 获取多个元素:
    document.getElementsByClassName(class)	   // 等价于es6的 querySelectorAll(.class)
    // 根据标签名称获取多个元素:
    document.getElementsByTagName(标签名称)		// 等价于es6的 querySelectorAll(标签)
    // 根据 name 属性获取多个元素:
    document.getElementsByName('name值') 	  // 等价于es6的 querySelectorAll(元素名称[name=name值])
    
  • 小总结:

    • es6 接口获取元素功能非常强大,而且接口非常易用
    • es5 接口功能非常局限,而且接口使用复杂

间接根据层次关系获取节点:

  • 父节点:parentNode:表示该元素的父节点
  • 孩子节点:
    • childNodes:表示该元素的所有子节点的集合,数组对象
    • firstElementChild:第一个儿子节点
    • lastElementChild:最后一个儿子节点
  • 兄弟节点:
    • nextElementSibling:该元素后一个兄弟元素节点
    • previousElementSibling:该元素前一个兄弟元素节点

dom 操作内容

  • 常用函数

    // 向body中追加html内容
    document.write(html内容) 
    // 获取或者修改元素的纯文本内容(从元素内部起始位置到终止位置的文本内容, 不包含内部的Html标签)
    element对象.innerText; 
    // 获取或者修改元素的html内容(从元素内部的起始位置到终止位置的全部内容, 包括其内部的Html标签)
    element对象.innerHTML; 
    // 获取或者修改包含自身的html内容
    element对象.outerHTML; 
    
  • 示例

    <!DOCTYPE html>
    <html lang="zh">
    <head><meta charset="UTF-8"><title>dom操作内容</title>
    </head>
    <body>
    <div id="d1">我是d1<br/></div>
    <div id="d2">我是d2</div>
    <div id="d3">我是d3</div>
    <script>// 向body中追加html内容document.write("<h1>我是h1标题标签</h1>");// 获取元素的纯文本,html内容对比var d1Ele = document.querySelector("#d1");	// 获取id是d1的元素 <div id="d1">我是d1<br/></div>console.log(d1Ele.innerText);	//我是d1  ==>标签中的文本console.log(d1Ele.innerHTML);	//我是d1<br>  ==>标签体console.log(d1Ele.outerHTML);	//<div id="d1">我是d1<br></div>  ==>整个标签// 修改元素的纯文本,html内容对比var d2Ele = document.querySelector("#d2");		 //获取id是d2的元素 <div id="d2">我是d2</div>//d2Ele.innerText = "<h2>我是h2标签体标签</h2>";	//显示纯文本d2Ele.innerHTML = "<h2>我是h2标签体标签</h2>";		//显示标签// 获取或修改包含元素自身的html内容(了解)var d3Ele = document.querySelector("#d3");		//获取id是d3的元素 <div id="d3">我是d3</div>console.log(d3Ele.outerHTML);					//<div id="d3">我是d3</div>d3Ele.outerHTML = "<h3>我是h3标签体标签</h3>";		//把d3的div整个替换为了h3标签
    </script>
    </body>
    </html>
    

dom 操作属性

  • 方法1:

    // 获取元素的一个属性的值。注意:只能获取标签上属性的值,获取不用用户输入的内容
    element对象.getAttribute(属性名)
    // 给元素设置一个属性,可以设置原生和自定义
    element对象.setAttribute(属性名, 属性值)
    // 移除元素的一个属性
    element对象.removeAttribute(属性名) 
    
  • 方法2:

    // 获取或修改一个属性的值
    element对象.属性名
    
  • 注:

    • 方法1 可以对自定义属性进行操作;但是 方法2 只能对标准属性进行操作。
    • 文本输入框标签:通过对象名.value 属性,可以获取到页面中用户输入的内容。
    • 复选框|单选框标签:
      • 通过 对象名.checked 属性可以获取到选中状态。选中:true;未选中:false
      • 通过 对象名.getAttribute() 函数获取属性值:有 checked 属性,值就是 checked;没有 checked 属性,值就是 null

dom 操作元素

  • 常用方法

    // 获取或者设置标签的html内容
    element对象.innerHTML
    // 移除元素
    element对象.outerHTML=""// 创造一个节点,返回一个element对象
    document.createElement("标签名称)
    // 给父标签添加一个子标签
    parentElement对象.appendChild(newNode) 
    // 在指定节点前插入新节点
    parentElement对象.insertBefore(newNode,beforeNode)
    // 替换节点的方法 
    parentElement对象.replaceChild(newNode, oldNode)
    // 删除节点的方法
    parentElement对象.removeChild(childNode)
    
  • 示例:

    <!DOCTYPE html>
    <html lang="zh">
    <head><meta charset="UTF-8"><title>dom操作元素</title>
    </head>
    <body>
    <div id="container"><input id="smoke" type="checkbox" name="hobby" value="抽烟"><label for="smoke">抽烟&emsp;</label>
    <!--    <input id="drink" type="checkbox" name="hobby" value="喝酒">-->
    <!--    <label for="drink">喝酒&emsp;</label>-->
    <!--    <input id="perm" type="checkbox" name="hobby" value="烫头">-->
    <!--    <label for="perm">烫头&emsp;</label>-->
    </div>
    <script >//获取div标签对象var divEle = document.querySelector("#container");// 添加喝酒 innerHTMLconsole.log(divEle.innerHTML);divEle.innerHTML += "<input id='drink' type='checkbox' name='hobby' value='喝酒'>"+ "<label for='drink'>喝酒&emsp;</label>";// 添加烫头// 创建input标签,使用document对象中方法createElement("标签名称")var inputEle = document.createElement("input");console.log(inputEle);			//<input>// <input id="perm" type="checkbox" name="hobby" value="烫头">inputEle.setAttribute("id","perm");console.log(inputEle);			//<input id="perm">inputEle.setAttribute("type","checkbox");inputEle.setAttribute("name","hobby");inputEle.setAttribute("value","烫头");console.log(inputEle);			//<input type="checkbox" id="perm" name="hobby" value="烫头">// <label for="perm">烫头&emsp;</label>// 创建标签var lableEle = document.createElement("lable");// 添加属性lableEle.setAttribute("for","perm");console.log(lableEle);			//<lable for="perm">// 添加标签体lableEle.innerHTML="烫头&emsp;";console.log(lableEle);			//<label for="perm">烫头&emsp;</label>// 使用父标签div中的方法appendChild(子标签);添加子标签divEle.appendChild(inputEle);divEle.appendChild(lableEle);// 移除元素(了解) outerHTML//lableEle.outerHTML = "";			//删除label标签
    </script>
    </body>
    </html>
    

dom 操作样式

  • 通过 style 对象

    // 获取或者修改一个样式
    element对象.style.css样式
    // 设置多个css样式
    element对象.style.cssText = "样式键值对;样式键值对..."
    

    注意:

    • style 对象,只能获取行内样式(写在一行中),不能获取内嵌的样式(写在 head 的 style 中)和外链的样式(写在css文件中)

    • style 是对象。typeof 的结果是 Object

    • 值是字符串,没有设置值是空字符串""

    • 命名规则:驼峰命名

    • DOM 中的 style 对象并不等同 html 标签中 style 属性,在 JS 中,横杠 - 是不能作为标识符的

      比如:背景色样式在 DOM 中是 backgroundColor,而在 CSS 中是 background-color

    style 对象的常用属性:backgroundColor(背景色)、backgroundImage(背景图片)、color(颜色)、width(宽像素)、height(高像素)、border(边框)、opacity(设置透明度,IE8 以前是 filter: alpha(opacity=xx))

  • 通过 className 属性

    节点的 className 属性对应于 css 中的类选择器

    // 获取或者修改class属性值(样式)
    element对象.className 
    // 获取class属性值集合,返回一个classList对象(es6特别提供的操作元素class的接口)
    element对象.classList
    

    element.classList 的常用方法:

    add("class样式名称")  		// 添加一个class样式
    remove("class样式名称") 	// 移除一个class样式
    contains("class样式名称") 	// 判断是否包含某一个样式,包含返回true,不包含返回false
    toggle("class样式名称") 	// 切换一个class样式。有则删除,无则添加
    
  • 添加事件:通过对象名.事件属性名 给元素添加事件

  • 示例:

    <!DOCTYPE html>
    <html lang="zh">
    <head><meta charset="UTF-8"><title>dom操作样式</title>
    </head>
    <body>
    <style>#p1{background-color: red}.mp{color:green}.mpp{background-color: lightgray;}
    </style>
    <p id="p1">1. 设置一个css样式</p>
    <p id="p2">2. 批量设置css样式</p>
    <p id="p3" class="mpp">3. 通过class设置样式</p>
    <p id="p4">4. 切换class样式</p>
    <input type="button" value="切换样式" id="b1" /><script >let p1 = document.querySelector("#p1");		//获取段落标签let p2 = document.querySelector("#p2");		//获取段落标签let p3 = document.querySelector("#p3");		//获取段落标签let p4 = document.querySelector("#p4");		//获取段落标签// 内嵌式的样式,通过style对象获取不了console.log("p1 backgroundColor: " + p1.style.backgroundColor);	//""// 给p1设置css样式// 白色字体p1.style.color = "white";// 黑色背景p1.style.backgroundColor = "black";// 获取p1的样式名console.log(p1.style.backgroundColor);	//blackconsole.log(p1.style.color);			//white// 隐藏不显示//p1.style.display = "none";// 显示//p1.style.display = "block";// 给p2批量设置css样式p2.style.cssText = "color: red;font-family: '楷体';border: 1px solid green";// 给p3通过class设置样式// a.给元素添加class属性的方式添加样式//p3.setAttribute("class","mp mpp");// b.使用className属性添加(两种方式)//p3.className= "mp mpp";p3.className = p3.className + " mp";	// mpp + " mp"==>mpp mpconsole.log("p3 className: " + p3.className);//mp mpp// 切换class样式// 获取p4的class样式集合var p4List = p4.classList;// 添加一个class样式p4List.add("mpp");// 判断某一个样式是否存在console.log(p4List.contains("mpp"));	//trueconsole.log(p4List.contains("mp"));		//false// 添加一个class样式p4List.add("mp");console.log(p4List);// 移除一个class样式p4List.remove("mp");// 获取id是b1的按钮var b1Ele = document.querySelector("#b1");// 通过对象名.事件属性名,给元素添加事件b1Ele.onclick = function () {//切换,无则添加,有则删除p4List.toggle("mp");}
    </script>
    </body>
    </html>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/784876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

习题2-5 求平方根序列前N项和

本题要求编写程序&#xff0c;计算平方根序列 的前N项之和。可包含头文件math.h&#xff0c;并调用sqrt函数求平方根。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S&#xff0c;精确到小数点后两位。题目保证计算结果不…

1.10 类、方法、封装、继承、多态、装饰器

一、介绍类 类(class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例 实例化&#xff1a;创建一个类的实例&#xff0c;类的具体对象。 对象&#xff1a;通过类定义的数据结构实例。对象包括两个数据成员&#x…

物联网实战--入门篇之(六)嵌入式-WIFI驱动(ESP8266)

目录 一、WIFI简介 二、基础网络知识 三、思路讲解 四、代码分析 4.1 状态机制 4.2 客户端连接 4.3 应用数据接收处理 4.4 数据发送 4.5 主函数调用 4.6 网络连接ID分配 五、总结 一、WIFI简介 WIFI在我们生活中太常见了&#xff0c;手机电脑都可以用WiFi连接路由器进行上…

2024品牌私域运营:「去中心化」正在成为企业决胜关键

越来越多的品牌选择以DTC模式与消费者互动和销售。通过与消费者建立紧密联系&#xff0c;不仅可提供更具成本效益的规模扩张方式&#xff0c;还能控制品牌体验、获取宝贵的第一方数据并提升盈利能力。许多企业采取的DTC私域策略以交易为中心的方法往往导致了成本上升和运营复杂…

【Blockchain】区块链浏览器 | 以太坊Etherscan比特币Blockchain门罗币Monero

区块链浏览器概述 区块链浏览器是一种软件,它使用API(应用程序编程接口)和区块链节点从区块链中提取各种数据&#xff0c;然后使用数据库来排列搜索到的数据&#xff0c;并以可搜索的格式将数据呈现给用户。 用户的输入是资源管理器上的可搜索项&#xff0c;然后通过数据库上…

市场复盘总结 20240329

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 60% 最常用…

STM32系统结构及总线介绍

1、学习路径 STM32中文参考手册中的第二章存储器和总线构架 2、系统架构&#xff08;中等容量芯片stm32f103c8&#xff09; 在小容量、中容量和大容量产品中,主系统由以下部分构成: 四个驱动单元&#xff1a; CortexTM-M3内核DCode总线&#xff08;D-bus&#xff09;&#…

霍尼韦尔大路灯怎么样?书客、雷士、霍尼韦尔护眼落地灯实测PK!

生活在快节奏的时代中&#xff0c;当代青少年都顶着很大的压力&#xff0c;熬夜学习是家常便饭&#xff0c;有时还需要借助电子产品来辅助学习&#xff0c;再加上许多家长都不太注重孩子的视力健康问题&#xff0c;孩子长时间处于一个不良的环境光下学习&#xff0c;眼睛极易疲…

PyLMKit(9):ChatTable与你的表格聊天,表格问答

功能介绍 与你的结构化数据聊天&#xff1a;支持主流数据库、表格型excel等数据&#xff01; ChatDB&#xff1a;支持数据库问答ChatTable&#xff1a;支持txt,excel,csv等pandas dataframe表格的问答 1.下载安装 pip install pylmkit -U pip install pandasql2.ChatTable实…

【AI+儿童绘本】从0到1制作儿童绘本故事操作思路

今天刷了会小H书&#xff0c;无意刷到一些 睡前儿童绘本故事&#xff0c; 下面一堆评论说 求软件什么的&#xff0c;博主只是引流没做任何回复。 这里写一篇文章科普下吧&#xff0c;免得有人被割韭菜。 制作儿童绘本&#xff0c; 大概这几个步骤。1、写生动有趣的故事&#x…

隐私计算实训营学习六:隐语PIR介绍及开发指南

文章目录 一、隐语实现的PIR总体介绍1.1 PIR的定义和种类1.2 隐语PIR功能分层 二、Index PIR-SealPIR介绍三、Keyword PIR- Labeled PSI介绍四、隐语PIR后续计划 一、隐语实现的PIR总体介绍 1.1 PIR的定义和种类 PIR(Private Information Retrieval PIR)隐匿查询&#xff1a;…

使用VNP时 本地服务/Dbeaver 无法连接数据库

在家使用VPN连接&#xff0c;启动本地Eclipse 的springboot 服务时&#xff0c;无法正常连接数据库。 解决方法: 在启动项配置中增加 -Djava.net.preferIPv4Stacktrue 之后&#xff0c;使用 Dbeaver时&#xff0c;也出现如下连接异常&#xff1a; 解决方法&#xff1a; 在dbe…

C语言:文件操作(2)

4.2 fputc的使用 这里写自定义目录标题 fputc的定义&#xff1a; 主要功能&#xff1a;一个字符一个字符的写进文件&#xff0c;将int类型的字符character写进文件流&#xff08;FILE* stream&#xff09;中&#xff0c;返回一个整形。如果成功fputc会返回写进文件的字符&…

城市雨量水位监测站

TH-SW2在繁华的现代都市中&#xff0c;有这样一个默默奉献的守护者&#xff0c;它时刻监测着城市的雨量和水位&#xff0c;为城市的安全提供着重要的保障。它就是我们今天要介绍的——城市雨量水位监测站。 一、雨量水位监测站的重要性 城市雨量水位监测站是城市防洪排涝体系的…

全局UI方法-弹窗三-文本滑动选择器弹窗(TextPickDialog)

1、描述 根据指定的选择范围创建文本选择器&#xff0c;展示在弹窗上。 2、接口 TextPickDialog(options?: TextPickDialogOptions) 3、TextPickDialogOptions 参数名称 参数类型 必填 参数描述 rang string[] | Resource 是 设置文本选择器的选择范围。 selected nu…

AI图像重绘解决方案

高质量的图像素材往往成本高昂且制作周期长&#xff0c;给企业带来了不小的困扰。美摄科技凭借其领先的AI图像重绘解决方案&#xff0c;为企业提供了一种高效、便捷且成本可控的图像优化途径&#xff0c;助力企业重塑视觉形象&#xff0c;引领市场新风尚。 美摄科技的AI图像重…

NASA数据集——2014 年、2015 年和 2017 年北美地区土壤地球物理属性值(源层厚度 (ALT)、介电常数、土壤水分剖面、表面粗糙度)

ABoVE: AirSWOT Color-Infrared Imagery Over Alaska and Canada, 2017 简介 文件修订日期&#xff1a;2019-04-25 数据集版本: 1 摘要 本数据集提供了根据 2014 年、2015 年和 2017 年 8 月和 10 月在阿拉斯加北部 12 个研究地点&#xff08;除个别地点外&#xff09;采集…

LLM大语言模型(八):ChatGLM3-6B使用的tokenizer模型BAAI/bge-large-zh-v1.5

背景 BGE embedding系列模型是由智源研究院研发的中文版文本表示模型。 可将任意文本映射为低维稠密向量&#xff0c;以用于检索、分类、聚类或语义匹配等任务&#xff0c;并可支持为大模型调用外部知识。 BAAI/BGE embedding系列模型 模型列表 ModelLanguageDescriptionq…

CCIE-11-IPSec-VPN

目录 实验条件网络拓朴实验目的 开始配置1. R2 Ping R3确定基础网络是通的2. 配置R23. 配置R34. 测试 实验条件 网络拓朴 实验目的 为PC1和PC2建立IPSec VPN PC1可以ping通PC2 开始配置 1. R2 Ping R3确定基础网络是通的 R2#show ip int br Interface IP…

UE5启用SteamOSS流程

一、安装OnlineSubsystemSteam插件 1、在UE里安装OnlineSubsystemSteam 2、设置默认开始地图 3、设置DefaultEngine.ini文件&#xff1a; 打开项目根目录/Config/DefaultEngine.ini文件 打开官网的配置说明 复制并粘贴到该文件中 4、设置运行模式 5、测试 确保Steam平台已…