14DOM和BOM

【一】DOM和BOM

1.文档对象模型(Document Object Model, 简称 DOM)操作页面标签
通过JavaScript可以创建、查询、修改和删除这些对象。
"""● document.getElementById(id): 通过元素ID获取DOM元素对象。
● element.querySelector/pseudo-class: 根据CSS选择器或伪类选择DOM元素对象。
● element.appendChild(newElement): 向指定元素添加子元素。
● element.setAttribute(name, value): 设置元素属性值。
● element.innerText/innerHTML: 获取或设置元素内的文本内容或HTML内容。"""
​
2.浏览器对象模型(Browser Object Model, 简称 BOM)操作浏览器
用于处理与浏览器环境相关的任务,如窗口管理、导航、cookie、location等。
"""
window.open(url[, name[, features]]): 打开新的浏览器窗口或tab访问指定URL。
window.location.href: 获取当前页面的URL地址,并可用于更改页面位置。
window.history.back(): 返回历史记录中的上一页。
navigator.userAgent: 获取浏览器的信息,例如类型、版本等。
"""

【二】Window对象

Window对象是JavaScript中表示浏览器窗口的全局对象,它提供了一系列方法来操作和管理窗口。
(1)方法
1.open()打开新窗口或者获取对一个已经存在的窗口的引用
第一个参数是目标网址,第二个参数可以为空,第三个参数为窗口的大小
 _blank 打开新窗口(默认) _self 原地打开
    let newWindow = window.open("https://www.example.com", "_blank");
    let newWindow = window.open("https://pic.netbian.com/", "_blank",'height=400px,width=400px');
2.close()关闭当前窗口。
    window.close();
3.setTimeout(函数,延时)在指定的时间延迟后执行一次指定的函数或者一段代码。
    setTimeout(function(){
      // 执行代码
    }, 100); // 1秒后执行   
4.setInterval(函数,延时)以固定的时间间隔重复执行指定的函数或者一段代码。
    setInterval(function(){
  // 执行代码
}, 200); // 每2秒执行一次
5.alert()显示一个带有指定消息和一个确认按钮的警告框。
    window.alert("Hello, World!");
6.confirm()显示一个带有指定消息和两个按钮(确认和取消)的对话框。
window.confirm()返回值是一个布尔值
    if (window.confirm("Are you sure?")) {
  // 用户点击了确认按钮
} else {
  // 用户点击了取消按钮
}
7.prompt()显示一个带有指定消息和一个文本输入框的对话框。
    let name = window.prompt("Please enter your name:");
8.innerHeight 属性-->返回浏览器窗口的内部高度(即视口的高度),以像素为单位,不包括浏览器的工具栏、滚动条等元素。
    let windowHeight = window.innerHeight;
console.log(windowHeight); // 输出当前窗口的视口高度
9.innerWidth 属性-->与上一致
10.监听 resize 事件--》上面这两个属性返回的值会随着窗口的大小调整而改变,因此如果需要监控窗口大小的改变,可以通过监听 resize 事件来实现  window.addEventListener("resize", function() {
  let windowHeight = window.innerHeight;
  let windowWidth = window.innerWidth;
  console.log("Window Height:", windowHeight);
  console.log("Window Width:", windowWidth);
});
11.window.opener是指打开当前窗口的那个窗口对象。它是 Window 对象的一个属性,用于在当前窗口中引用到打开它的父窗口或者来源窗口。
    使用场景:
    1.当前窗口是通过使用 JavaScript 的 window.open() 方法打开的弹出窗口时,可以使用 window.opener 来引用打开它的父窗口。
    let popup = window.open("popup.html"); // 打开一个弹出窗口
    let parentWindow = window.opener;
    console.log(parentWindow); // 输出父窗口对象
    
    2.postMessage() 方法
    当前窗口是通过其他窗口向其发送消息(使用 postMessage() 方法)时,可以使用 event.source 属性来获取消息来源窗口,并通过 window.opener 来引用该来源窗口。
    在当前窗口 current.html 中的 JavaScript 代码中,通过监听 message 事件接收来自来源窗口的消息,并使用 event.source 和 window.opener 引用到来源窗口
    let currentWindow = window.open("current.html"); // 打开目标窗口
​
    // 原窗口向目标窗口发送消息
  currentWindow.postMessage("Hello", "http://example.com");
在目标窗口:
window.addEventListener("message", function(event) {
  let message = event.data;
  let sourceWindow = event.source;
  let openerWindow = window.opener;
​
  console.log("Message:", message);
  console.log("Source Window:", sourceWindow);
  console.log("Opener Window:", openerWindow);
});

【三】Window子对象

1.window.document
    此子对象表示当前窗口中的文档对象,用于对页面内容进行读取和修改操作。
    通过 window.document,可以使用各种方法来查询和修改当前页面的 HTML 结构、CSS 样式和 DOM 元素。
    let pageTitle = window.document.title;//获取页面标题
2.window.location控制地址
    包含有关当前页面 URL 的信息,并提供了一些与页面导航相关的方法。
    通过 window.location,可以获取当前页面的 URL、查询字符串参数、路径等信息,并且可以使用一些方法来导航到其他页面。
    window.location.href = 'https://example.com';
(1)window.location控制地址
1.window.location.href*
获取当前页面的完整 URL(包括协议、域名、路径等)。
    let currentURL = window.location.href;
    console.log(currentURL);
​
    window.location.href = url // 跳转到目标地址
2.window.location.protocol
获取当前页面的协议部分(例如 'http:' 或 'https:')。
    let protocol = window.location.protocol;
    console.log(protocol);
3.window.location.host
获取当前页面的主机(域名和端口号)部分。
    let host = window.location.host;
    console.log(host);
4.window.location.hostname
获取当前页面的主机名部分。
    let hostname = window.location.hostname;
    console.log(hostname);
5.window.location.port
获取当前页面的端口号部分。
    let port = window.location.port;
    console.log(port);
6.window.location.pathname
获取当前页面的路径部分。
    let pathname = window.location.pathname;
    console.log(pathname);
7.window.location.search
获取当前页面的查询参数部分(即 URL 中问号后面的内容)
    let searchParams = window.location.search;
    console.log(searchParams);
8.window.location.hash
获取当前页面的片段标识部分
    let hash = window.location.hash;
console.log(hash);
9.window.location.assign()
将当前页面重定向到指定的 URL。
    // 将当前页面重定向到 example.com
    window.location.assign("http://example.com");
10.window.location.reload()*
    // 重新加载当前页面
window.location.reload();
(2)window.history
用于操作浏览器的历史记录,包括向前和向后导航
1.window.history.length
    返回当前会话的历史记录条目数
2.window.history.back()
    加载上一个历史记录
3.window.history.forward()
    加载下一个历史记录
4.window.history.go()
    根据传入的整数参数,加载相对于当前历史记录的某个条目。负数表示后退,正数表示前进, 表示重新加载当前页。
5.window.history.pushState()
    向浏览器历史记录中添加新的状态,并且不会触发页面的重新加载。它接受三个参数:state、title 和 URL。
6.window.history.replaceState()
    替换当前的历史记录状态,不会触发页面的重新加载。它接受三个参数:state、title 和 URL。
(3)window.navigator提供有关浏览器环境和设备的信息
1.window.navigator.userAgent
    返回浏览器的用户代理字符串,该字符串包含了有关浏览器厂商、版本号以及操作系统等信息。
2.window.navigator.platform
//'Win32'
    返回操作系统平台
3.window.navigator.vendor
    返回浏览器的厂商或供应商名称
4.window.navigator.language
    返回浏览器的首选语言,通常是用户操作系统的默认语言。
5.window.navigator.cookieEnabled
    返回一个布尔值,表示浏览器是否启用了 cookie
6.window.navigator.plugins
    返回一个包含浏览器插件列表的 PluginArray 对象

【四】弹出框

1.警告框(alert)
2.确认框(confirm)
3.提示框(prompt)

【五】计时器相关

1.过一段时间触发一次(setTimeout)
2.每隔一段时间触发一次(setInterval)
3.清除定时器
4.使用clearTimeout函数。当你调用setTimeout时,它会返回一个ID,你可以使用这个ID来清除定时器。

(clearTimeout/clearInterval)
	clearTimeout:用于取消使用setTimeout函数设置的定时器
	eg:
	var timer = setTimeout(function() {
  // 在延迟后执行的操作
}, 5000); // 延迟5秒后执行

    // 如果需要取消定时器
    clearTimeout(timer);
    
	clearInterval:用于取消使用setInterval函数设置的定时器
	

【六】查找标签

(1)直接查找标签getElement
1.getElementById根据元素的ID属性直接获取到对应的HTML元素。
	var element = document.getElementById("big");
	
	2.getElementsByTagName根据标签名称获取匹配的所有元素。
	var elements = document.getElementsByTagName("div");
	
	3.getElementsByClassName根据类名获取匹配的所有元素
	var elements = document.getElementsByClassName("up");
	//HTMLCollection [div.up]
(2)半间接查找标签query
选择器方法#id,.class等
1.querySelector,
    document.querySelector方法返回第一个匹配选择器的元素
    // 使用querySelector查询单个元素
console.log(document.querySelector(".big"))//得到的是html一整个class=big包起来的代码

2.querySelectorAll
document.querySelectorAll方法返回所有匹配选择器的元素列表
// 使用querySelectorAll查询多个元素
console.log(document.querySelectorAll(".big"))
//元素列表 [div.big]
(3)间接查找标签
首先肯定是要先基于某个元素,第一步是要先获取某元素,用直接查找,然后该元素.以下的方法
1.parentElement返回指定元素的父元素
console.log(elements.parentElement)得到的是html一整个父元素包起来的代码

2.children返回指定元素的所有子元素组成的集合
divEleOne.children
//[p.img, p.xm, p.zw]

3.firstElementChild指向指定元素的第一个子元素//得到的是html一整个子元素包起来的代码

4.lastElementChild指向指定元素的最后一个子元素。

5.nextElementSibling指定元素后面的下一个兄弟元素

6.previousElementSibling返回在指定元素之前出现的前一个兄弟元素

【七】节点操作

节点操作是指在文档对象模型(DOM)中对节点进行创建、获取、修改、删除等操作。
(1)创建节点
1.createElement(tagName): 创建一个具有指定标签名的元素节点。
newDiv=document.createElement("div")执行了这段代码,那么新创建的 div 元素在页面的任何地方都不会显示或存在,它仅仅作为一个内存中的对象。
document.body.appendChild(newDiv);才会添加进文档树

2.createTextNode(text): 创建一个包含指定文本内容的文本节点。
// 将文本节点添加到div元素中  
newDiv.appendChild(newText);

3.createDocumentFragment(): 创建一个空的文档片段节点,可用于高效地插入多个节点。
(2)获取节点
1.getElementById(id): 根据元素的id属性获取对应的元素节点。
2.getElementsByTagName(tagName): 根据元素的标签名获取一组元素节点。
3.getElementsByClassName(className): 根据元素的类名获取一组元素节点。
4.querySelector(selector): 使用CSS选择器获取匹配的第一个元素节点。
5.querySelectorAll(selector): 使用CSS选择器获取匹配的所有元素节点。
(3)修改节点
1.父node.appendChild(childNode): 将一个节点作为父节点的最后一个子节点添加到指定节点。
2.parent.removeChild(childNode): 从父节点中移除指定子节点。
3.父node.replaceChild(newNode, oldNode): 使用新节点替换旧节点。
4.父node.insertBefore(newNode, referenceNode): 在参考节点之前插入新节点。
(4)属性操作
"""只能用在HTML 元素上直接设置的属性值,这些属性是 HTML 标签的一部分,而不是 CSS 样式。这些属性可以包括 id、class、data-* 自定义属性、src(对于图片)、href(对于链接)等。"""

1.element.getAttribute(attribute): 获取指定属性的值。
    imga=document.getElementsByTagName("img");
    //HTMLCollection [img]
    imga[0].getAttribute("src")
    //'夏目头像.jpeg'
2.element.setAttribute(attribute, value): 设置指定属性的值。
3.element.removeAttribute(attribute): 移除指定属性。
(5)文本操作
1.node.textContent: 获取或设置节点的文本内容。
2.node.innerHTML: 获取或设置节点的HTML内容。
案例1图片
let imgEle = document.createElement("img");
// undefined
imgEle
// <img>

// 向标签内添加图片链接
imgEle.src="111.jpg";
// '111.jpg'
imgEle
// <img src="111.jpg">

// 向图片内设置自定义属性
imgEle.setAttribute("name","dream");
// undefined
imgEle
// <img src="111.jpg" name="dream">

// 向图片内设置默认属性
imgEle.setAttribute("title","一张图片");
// undefined
imgEle
// <img src="111.jpg" name="dream" title="一张图片">

// 向div标签下面塞入img标签
let divEle = document.getElementById("d1");
// undefined
divEle.appendChild(imgEle)
// undefined
案例2a标签
let aEle = document.createElement("a");
// undefined

aEle
// <a></a>

// 设置默认属性:链接地址
aEle.href = "https://www.mzitu.com/"
// 'https://www.mzitu.com/'

aEle
// <a href="https://www.mzitu.com/"></a>

// 设置文本内容
aEle.innerText = "点我有你好看"
// '点我有你好看'

aEle
// <a href="https://www.mzitu.com/">点我有你好看</a>

// 将a标签插入到指定位置
let divEle = document.getElementById("d1");
// undefined
let pEle = document.getElementById("p1")
// undefined
divEle.insertBefore(aEle,pEle)
// <a href="https://www.mzitu.com/">点我有你好看</a>
(6)innerText和innerHTML
1.innerText用于操作元素中的纯文本内容,不解析HTML标记,且是只读属性。
console.log(el.innerText)//文字内容
2.innerHTML用于操作元素中的HTML内容,可以包含HTML标记
	console.log(el.innerHTML)//获取到所有html代码

【八】获取值操作

1.获取属性值--》先用getElementById查找到元素,然后用getAttribute查找到属性值

2.获取文本内容---》先用getElementById查找到元素,使用innerText、innerHTML或textContent属性来获取一个元素的文本内容
    ● innerText:返回元素的纯文本内容,不包括HTML标记。
    ● innerHTML:返回元素的HTML内容,包括HTML标记。
    ● textContent:返回元素及其所有子元素的文本内容,包括隐藏元素和注释等。
    
3.获取用户输入值--》先用getElementById查找到元素,使用input.value
● 对于表单元素(如input、select、textarea等)
● 可以通过获取其value属性来获取用户输入的值。

4.获取文件
	"""
	// 获取文件选择框的DOM元素
var fileInput = document.getElementById("fileInput");

// 添加change事件监听器,以便在用户选择文件后执行操作
fileInput.addEventListener("change", function() {
  // 获取选择的所有文件
  var files = fileInput.files;

  // 遍历文件列表,并处理每个文件
  for (var i = ; i < files.length; i++) {
    var file = files[i];
    console.log("文件名:" + file.name);
    console.log("文件类型:" + file.type);
    console.log("文件大小(字节):" + file.size);
    console.log("最后修改时间:" + file.lastModified);
  }
});
	"""

【九】属性操作

1.class属性操作
	.classList() 是JavaScript中用于获取HTML元素的类名列表的方法
	var element = document.getElementById("myElement");
	var classList = element.classList;
	// (1) 查看当前类标签下的所有属性
console.log(el.classList)
//DOMTokenList ['big', value: 'big']

// 移除当前类标签下的某个属性
你要移除的节点.classList.remove("big")
// undefined

// 添加当前类标签下的某个属性
你要增加的节点.classList.add("big")
// undefined

// 校验当前标签下是否包含某个属性
你要判断的节点.classList.contains("big")
true
你要判断的节点.classList.contains("xxx")
false

// 当前标签下有这个属性则移除,没有这个属性则添加
divEle.classList.toggle("bg_red");
// false
divEle.classList.toggle("bg_red");
// true

2.标签样式
由于同一标签可能有多个所以是一个数组,所以要用索引
let pEle = document.getElementsByTagName("p")[0]
pEle.style.color = "red";

【十】事件

事件(Event)是指在程序执行期间发生的特定操作或状态变化
1.鼠标事件
	● click:鼠标点击事件。
    ● mouseover:鼠标悬停在元素上的事件。
    ● mouseout:鼠标离开元素的事件。
    ● mousedown:鼠标按下事件。
    ● mouseup:鼠标松开事件。
    ● mousemove:鼠标移动事件。
2.键盘事件
	● keydown:键盘按下事件。
    ● keyup:键盘松开事件。
    ● keypress:键盘按键被按下并松开事件。
3.表单事件
	● submit:表单提交事件。
    ● change:表单值改变事件。
    ● focus:表单元素获取焦点事件。
    ● blur:表单元素失去焦点事件。
4.文档加载事件
	● load:页面完全加载完成事件。
	● unload:页面关闭或离开事件。
5.定时器事件
	● setTimeout:在指定的延迟时间后触发事件。
	● setInterval:每隔一定时间触发事件。
6.自定义事件:
	● 开发者可以根据需要创建自定义事件,并使用dispatchEvent来触发事件。

【十一】绑定事件的两种方式

(1)传统的事件属性绑定
通过在HTML标签中直接添加事件属性来实现事件绑定。 
<button onclick="myFunction()">点击我</button>

<script>
  function myFunction() {
    alert("按钮被点击了!");
  }
</script>
(2)现代的事件监听绑定
通过JavaScript代码动态地选择元素,并以编程方式绑定事件监听器。 
<button id="myButton">点击我</button>

<script>
  var button = document.getElementById("myButton");
  button.addEventListener("click", function() {
    alert("按钮被点击了!");
  });
</script>

【十二】apply和call

(1)call
1.语法:
function 自己对象(自己的参数){
    要继承的对象.call(本函数, 你自己的参数, arg2, arg...);
}
在call哪里没写自己的参数的就继承父亲的 
(2)apply
● 和call()的区别在于传递的参数不同
● call()传递的参数是一个个的参数
apply是一个数组
1.语法:
    Function.apply(obj,args)方法能接收两个参数:
    // obj:这个对象将代替Function类里this对象
    // args:这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值