JS之DOM

news/2024/11/9 0:44:35/

1、节点的属性(nodeName、nodeType、nodeValue):

文档节点:

  • nodeType = 9
  • nodeValue = null
  • nodeName= #document

元素节点:

  • nodeType = 1
  • nodeValue = null
  • nodeName= 标签名

属性节点:

  • nodeType = 2
  • nodeValue = 属性值
  • nodeName= 属性名

文本节点:

  • nodeType = 3
  • nodeValue = 文本内容
  • nodeName= #text

2、Dom的获取:

① 获取body标签:document.getElementsByTagName("body")[0]document.body

② 获取html根标签:document.documentElement

③ 获取页面中所有的元素:document.alldocument.getElementsByTagName("*")

④ 获取标签元素的属性:元素.属性

<!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><script>// window.onload = function () {// 	let btnDom = document.getElementsByClassName('btn')[0]// 	btnDom.onclick = function() {// 		alert('点击按钮')// 	}// }</script>
</head>
<body><div id="app"><button class="btn">我是一个按钮</button><input type="text" value="请输入" class="input0"/></div><script>/*** 获取标签元素的属性*      -- 元素.属性*      -- 获取class的样式的名称:元素.className*/let inputDom = document.getElementsByClassName("input0")[0]console.log('inputDom',inputDom.value) // 打印:请输入</script>
</body>
</html>

⑤ 获取当前元素下面的所有子节点(IE8以上包含换行和空格):元素.childNodes

⑥ 获取当前元素下面的所有子元素(不包含空格):元素.children

⑦ 获取当前元素下面的第一个子节点(IE8以上包含换行和空格):元素.firstChild

⑧ 获取当前元素下面的第一个子元素(不包含空格,适用IE8以上):元素.firstElementChild

⑨ 获取当前元素的父节点:元素.parentNode

⑩ 获取当前元素的前兄弟节点(可能或获取到空白):元素.previousSibling

⑪ 获取当前元素的前一个兄弟元素(不会获取到空白) :元素.previousElementSibling

⑫ 获取当前元素的后一个兄弟节点(可能或获取到空白):元素.nextSibling

3、Dom的增删改:

① 新建元素节点:document.createElement("标签名")

② 向父节点中添加子节点:父节点.appendChild(子节点)

③ 在指定的子节点前面插入新的子节点:父节点.insertBefore(newChild, oldChild)

④ 指定子节点替换已有的子节点:父节点.replaceChild(newChild, oldChild)

⑤ 删除子节点:

⑥ 新增文本节点 : document.createTextNode("文本")

<!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>
</head>
<body><div id="app"><div>第1个div</div><div>第2个div</div><ul><li>1、哈哈哈</li><li>2、嘻嘻嘻</li></ul></div><script>/*** 给指定的父元素新增一个子节点*/// 方法一:// 新建元素节点let liDom = document.createElement("li")// 给指定元素添加文本// liDom.innerText = '3、嘿嘿嘿'// 同理:给指定元素添加文本方法2(需要两步,①新增文本节点 ②将文本节点放在元素节点内容)let liText = document.createTextNode("3、嘿嘿嘿")// 向父节点中添加子节点  --  父节点.appendChild(子节点)liDom.appendChild(liText)// 最后将构造完成的子节点,放在父元素的里边let ulDom = document.getElementsByTagName("ul")[0]ulDom.appendChild(liDom)// 方法二:直接使用innetHTML进行父元素内容的重写(如果有绑定的函数,则会失效),不推荐直接使用// let ulDom = document.getElementsByTagName("ul")[0]// ulDom.innerHTML += '<li>3、嘿嘿嘿</li>'/*** 在指定的子节点前面插入新的子节点*   -- 父节点.insertBefore(newChild, oldChild)*/let oldChildDom = document.getElementsByTagName("li")let newChildDom = document.createElement("H1")newChildDom.innerText = '放在  3、嘿嘿嘿  之前'ulDom.insertBefore(newChildDom, oldChildDom[oldChildDom.length - 1])/*** 指定子节点替换已有的子节点*   -- 父节点.replaceChild(newChild, oldChild)*/let replaceChildDom = document.createElement("p")let pText = document.createTextNode("使用 p 标签替换 H1")replaceChildDom.appendChild(pText)ulDom.replaceChild(replaceChildDom, newChildDom)/*** 删除子节点*   -- 1、父节点.removeChild(要删除的子节点)*   -- 2、子节点.parentNode.removeChild(要删除的子节点)*/// ulDom.removeChild(replaceChildDom)// replaceChildDom.parentNode.removeChild(replaceChildDom)</script>
</body>
</html>

4、元素的样式:

① 获取行内样式:元素.style.样式名称

② 获取当前正在显示的样式(只能读,不能修改,想要修改要使用style):

③ 获取元素可见区的宽度和高度(不带px):

④ 获取元素整个的宽度和高度(不带px):

⑤ 获取当前元素的定位父元素(获取到离当前元素最近的祖先定位,如果没有开启定位的祖先元素,则返回body):

  • offsetParent - 包含width+padding+border

⑥ 获取当前元素相对于其定位父元素的水平偏移量:offsetLeft

⑦ 获取当前元素相对于其定位父元素的垂直偏移量:offsetTop

⑧ 获取滚动区域的宽度:scrollWidth

⑨ 获取滚动区域的高度:scrollHeight

⑩ 获取水平滚动条滚动的距离:scrollLeft

⑪ 获取垂直滚动条滚动的距离:scrollTop

当满足 scrollHeight - scrollTop == clientHeight ,说明垂直滚动条滚动到底

当满足 scrollWidth - scrollLeft == clientWidth, 说明水平滚动条滚动到底

onscroll事件:会在滚动条滚动的时候触发

<!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>body {margin: 0;padding: 0;}#app {/* position: relative; */}#box1 {width: 100px;height: 100px;background-color: pink;padding: 10px;margin: 5px;}</style>
</head>
<body><div id="app"><div id="box1" style="border: 6px solid blue;"></div></div><script>window.onload = function() {let box1Dom = document.getElementById("box1")// 获取行内样式:元素.style.样式名称let borderWidth = box1Dom.style.borderWidthconsole.log('borderWidth',borderWidth) // 6px// 设置(可以增加,也可以修改)样式box1Dom.style.borderColor = 'purple'console.log('行内样式Width',box1Dom.style.width) // 获取不到/*** 获取当前正在显示的样式(只能读,不能修改,想要修改要使用style):*  - 只有ie支持:元素.currentStyle.样式名称*  - 其他浏览器:使用windows对象上的 getComputedStyle() 方法,此方法接收两个参数:*     - 参数一:需要获取样式的元素*     - 参数二:传递一个伪元素,一般传null*     - 返回值:key是样式名,值是样式名的对象*/let box1DomCurrentStyle = getComputedStyle(box1Dom, null)console.log('当前正在显示的样式Width',box1DomCurrentStyle.width) // 100px/*** 获取元素可见区的宽度和高度(不带px):*   clientWidth - 包含width+padding*   clientHeight - 包含width+padding*/let box1DomClientWidth = box1Dom.clientWidthconsole.log('box1Dom可见宽度',box1DomClientWidth) // 120px/*** 获取元素整个的宽度和高度(不带px):*   offsetWidth - 包含width+padding+border*   offsetHeight - 包含width+padding+border*/let box1DomOffsetWidth = box1Dom.offsetWidthconsole.log('box1Dom整个的宽度',box1DomOffsetWidth) // 130px/*** 获取当前元素的定位父元素(获取到离当前元素最近的祖先定位,如果没有开启定位的祖先元素,则返回body):*   offsetParent - 包含width+padding+border*/let box1DomOffsetParent = box1Dom.offsetParentconsole.log('box1Dom的定位父元素',box1DomOffsetParent) // body/*** 获取当前元素相对于其定位父元素的水平偏移量:offsetLeft* 获取当前元素相对于其定位父元素的垂直偏移量:offsetTop*/let box1DomOffsetLeft = box1Dom.offsetLeftconsole.log('box1Dom相对于其定位父元素的水平偏移量',box1DomOffsetLeft) // 相对于body}</script>
</body>
</html>

http://www.ppmy.cn/news/3515.html

相关文章

latex设置citation显示作者+年份

如果是bib文件分开放&#xff0c;并且每个引用都明确写了author和year&#xff0c;那么直接\citep 就可以&#xff0c;就能产生(abc et al., 2015) 这种格式, 如果你不想要圆括号&#xff0c;可以使用\usepackage[square]{natbib}, 也可以使用\setcitestyle{authoryear,open{(}…

家居类小红书达人投放总结,kol执行策略

在小红书平台上&#xff0c;许多品牌方都做了达人投放&#xff0c;但结果却反响平平&#xff0c;最后才发现是达人挑选出了问题&#xff0c;而发现这个问题的代价就是错失先机&#xff0c;也耗费大量成本来试错&#xff0c;今天为大家分享一下小红书达人投放总结以及超硬干货。…

电销机器人源码厂家哪家好

而随着人工智能的发展&#xff0c;越来越多的企业开始选择采用智能语音机器人&#xff0c;来减轻人工的压力&#xff0c;更好的服务客户&#xff0c;提高效率。 智能语音机器人 优点有哪些? 1.降低成本 企业使用智能语音机器人不仅不用担心人员流失问题&#xff0c;还能为机…

引用类型 - JavaScript 数组对象、遍历、复制、冒泡排序、选择排序、数组方法、数组去重

写在前面 哎呀呀&#xff0c;每次都是要沉淀好久好久才能更一篇文章…基本上半个月都很难出一篇&#xff0c;但还是想把这个系列做起来&#xff0c;主要是为了记录自己学习和开发的过程&#xff0c;以便在面试的时候讲项目&#xff0c;能说得头头是道(◍•ᴗ•◍) 马上就要开…

Solid.js前端新秀框架 力压 web3.js 框架

SolidJS 是什么&#xff1f;SolidJS是一个声明式、高效且灵活用于构建用户界面的 JavaScript 库。 Solid 号称拥有 JSX 语法&#xff0c;类似于 React hook 的语法&#xff0c;你可以用现代化的开发方式&#xff0c;获得性能最快的代码。 框架本身只有7 KB大小&#xff0c;无需…

Vue的四个常用选项

文章目录前言一、四大选项简介二、filters&#xff08;过滤器&#xff09;三、computed&#xff08;计算属性&#xff09;四、methods&#xff08;方法&#xff09;五、watch&#xff08;观察&#xff09;总结:前言 本文讲解了vue.js中的四个常用选项&#xff0c;4个参数选项&…

利用JAVA编写计算器思路

1. 在开始写计算器之前&#xff0c;用笔在纸上画出计算器的草图&#xff0c;显示屏的位置&#xff0c; 每个按钮的位置及大小比列。 2. 使用 setLayout(new GridLayout(6, 3, 10, 10));创建容器框框&#xff0c;使 用 JPanel JPanel pane new JPanel(); pane.setLayout(new Bo…

竞拍拍卖管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系我门、公告信息、拍卖物品&#xff0c;拍卖完成 管理员功影&#xff1a; 1、管理关…