JS75-107

本文介绍了DOM的基本操作,如获取元素、操作元素属性、文本内容和样式,以及动态删除节点。此外,还详细讨论了事件处理,包括事件解绑、事件类型、鼠标事件和事件流,特别关注了全选全不选功能的实现和事件委托的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识DOM

在这里插入图片描述
在这里插入图片描述
非常规:


console.log(document.documentElement) // rem
console.log(document.head)//获取head
console.log(document.body)//获取body

常规:上图byId或者



var item ocument.getElementsByClassName("newsitem")

伪数组:

//getElementsByClassName
var items = document.getElementsByClassName("newsitem")
console.log(items)//伪数组
// items[0].innerHTML = "news-111111"
for(var i=0;i<items.length;i++){
items[i].innerHTML = "news-"+i
// Set => Array.from
var newitems = Array.from(items)
console.log(newitems.filter)
//querySelector 返回一个对象,(第一个遇到的)
var item = document.querySelector("ul li")
console.log(item)
//querySelectorAll 返回多个对象
var items = document.querySelectorAll("ul li")
console.log(items)

操作元素属性

属性分为原生属性和自定义属性

<div id="box" kerwin="hello">hello </div>
<input type="text" jvalue="hello" id="username">
<script>
/*
元素自带(原生)属性
自定义属性
*/
box.innerHTML ="22222"
username.type = "password"
</script>

自定义属性设置需要:setAttribute getAttibute removeAttibute

box.setAttribute("tiechui","222222")
console.log(box.getAttribute("tiechui"))
box.removeAttribute("tiechui")
box.removeAttribute("kerwin")
var oitems = document.getElementsByTagName("li")
for(var i=0;i<oitems.length;i++)
)E
oitems[i].setAttribute("kerwinindex",i)

密码可视化

<script>
var passInput = document.getElementById("password")
var eyeBtn = document.querySelector("#eyebtn")
eyeBtn.onclick = function(){
console.log(passInput.type)
"password"){
"text"
(passInput.type
passInput.type
}else{
"password"
passInput.type
}
</script>

全选全不选

首先在body中创建一个表单和几个列表
通过query获取值 (true或者false)
将表单的值赋值给列表

<script>
var oAll = document.querySelector("#all")
var oitems = document.querySelectorAll(".shop input")
// console.log(oitems)
oAll.onclick = function(){
// console.log(oAll.checked)
for(var i=0;i<oitems.length;i++){
oitems[i].checked = oAll.checked
}
}
</script>

实现列表全选时全选按钮自动勾选

for(var i=0;i<oitems.length;i++){
oitems[i].onclick = handler
}
function handler()E
var count = O
for(var i=0;i<oitems.length;i++){
if(oitems[i].checked) count++
if(count===oitems.length){
oAll.checked = true
}else{
oAll.checked = false
}
}

操作元素文本内容

// innerHTML
// innerText
// value
console.log(box.innerHTML)
// box.innerHTML = "11111111"
console.log(box.innerText)//获取识有文本
box.innerText="<h1>1111111</h1>"//不解析 html

value既可以赋值也可以读取(只能用于表单标签)

操作元素样式


<div id="box" style="width: 100px;color:
yellow;"background-color:black;>11111</div>
<script>
//只能行内样式方法style
console.log(box.style.width)
console.log(box.style["background-color"])  
console.log(box.style.backgroundcolor)//驼峰  如果不用这两种写法的话,会使得color被认为是变量名
//内部样式,外部样式,行内getcomputedstyle获取,不能赋值写样
式。

var res = getComputedStyle(box)

var res = getComputedStyle(box).height
console.log(res)

操控class:3种方法
法一

// .className
// console.log(box.className)
// box.className = "item item2"
"item item2 item2 item3"
box.className

法二

console.log(box.classList)
// box.classList.add("item2")
box.classList.remove("item2")

法三

//切换 toggle   有就加,没有就删
btn.onclick =function(){
box.classList.toggle("item")

选项卡案例感悟

非常典型的错误写法

在这里插入图片描述

因为是先用for循环绑定的事件,for循环是一瞬间的事,所以之后点击事件一定会返回i的最后的值。
正确写法:

var oHeaderItems = document.querySelectorAll(".header li")
var oBoxItems = document.querySelectorAll(".box li")
for(var i=0; i<oHeaderItems.length; i++){
//自定义属性
oHeaderItems[i].dataset.index =i
oHeaderItems[i].onclick = function(){
console.log(this.dataset.index)
//获取自身上的属性
}   

通过this来获取index

DOM节点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取节点的方法

console.log(box.childNodes)//所有节点
console.log(box.children)//所有元素
//firstChild firstElementChild
console.log(box.firstChild)
console.log(box.firstElementChild)
//lastChild lastElementChild
console.log(box.lastChild)
console.log(box.lastElementChild)
// previousSibling previousElementSibling
console.log(box.previousSibling)
console.log(box.previou;Sibling)
// nextSibling nextElementSibling
console.log(box.nextSibling)
console.log(box.nextElementSibling)

节点操作

在这里插入图片描述

<div id="box">
<div id="child">11111111</div>
</div>
var odiv = document.createElement("div")
“我是新创建的节点”
odiv.innerHTML
console.log(odiv)
box.appendChild(odiv)

其中appendChild为在 其中插入一个

//插入节点
// box.appendChild(odiv)
//insertBefore(要插入的节点,谁的前面)
box.inserBefore(odiv,child)
//删除节点(节点对象)
box.removeChild(child)
box.remove(//删除自己以及后代
替换节点replacechild(新的节点,老的节点)
var odiv2= document.createElement("div")
odiv2.innerHTML = "2222222"
box.replaceChild(odiv2,child)
var oCloneBox = box.cloneNode(true)
console.log(oCloneBox)
document.body.appendChild(oCloneBox)

动态删除案例感想

var arr = ["111","2222","333"]
for(var i=0;i<arr.length;i++){
var oli = document.createElement("li")
oli.innerHTML = arr[i]
var obutton = document.createElement("button")
="delete"
obutton.innerHTML
obutton.onclick = handler
oli.appendChild(obutton)
list.appendChild(oli)



function handler(){
console.log(this.parentNode)
this.parentNode.remove()   //动态删除
}

节点属性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取元素尺寸

在这里插入图片描述
注意:

1.单位数字
2. box-sizing (border+padding+content)
3.display:none 拿不到

获取元素偏移量

console.log(child.offsetLeft,child.offsetTop)
console.log(myparent.offsetLeft,myparent.offsetTop)
console.log(box.offsetLeft,box.offsetTop)
参考点:是定位父级
如果父级元素都没有定位,偏移量相对于body
*/

获取可视窗口的尺寸

console.log("宽度",document.documentElement.clientwidth)
console.log("高度",document.documentElement.clientHeight)

初识事件

在这里插入图片描述

事件解绑

//事件解绑-dom0节点.οnclick=null
btn.onclick
function(){
console.log("谢谢惠顾"// console.log(this)
this.onclick=null
}

//事件解绑dom2
function handler(){
console.log("谢谢惠顾"this.removeEventListener("click",handler)
}
//btn.addEventListener("click",handler)

低版本ie:
function handler(){
console.1og("谢谢惠顾“)
btn.detachEvent("onclick",handler)
“
btn.attachEvent("onclick",handler)

事件类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

事件对象

在这里插入图片描述

username.onkeyup = function(evt){
console.log(evt.keyCode)
if(evt.keyCode===13){
console.log("创建节点")
3
box.onclick
function(evt){
console.log(evt)

鼠标事件

box.onclick =function(evt){
console.log(evt.clientX,evt.clientY)
console.log(evt.pagex,evt.pageY)
}
//clientxclientY距离浏览器可视窗口的左上角的坐标值
//pagex pageY 距离页面文档流的左上角的坐标值
//offsetx offsetY 距离触发元素的左上角的坐标值

鼠标跟随

1.鼠标移入显示
在这里插入图片描述
但是会出现抽风的现象,因为会碰到p标签,而相对于p标签距离就会变为0
所以:
在这里插入图片描述
3.最后控制移动,通过获取与父盒子的距离
在这里插入图片描述

鼠标拖拽

基础拖拽:

box.onmousedown =function(){
console.log("down")
document.onmousemove = function (evt) E
// console.log("move")
var x = evt.clientX -box.offsetWidth/2
var y =evt.clientY-box.offsetHeight/2
box.style.left=x
"px"
box.style.top = y + "px"
box.onmouseup = function () {
console.log("up")
document.onmousemove = null
}

控制不超出页面边框:

if(y<=0) y=0
box.style.left=x + "px"
box.style.top= y + "px"

DOM事件流

在这里插入图片描述

阻止事件传播

function handler(evt){
console.log(this.parentNode)
this.parentNode.remove()
//阻止事件传播 (上文本来有个跳转,通过这个取消跳转)
evt.stopPropagation
()
}

阻止默认行为

// domo return false 阻止默认行为
// document.oncontextmenu = function(){
console.log("右键单击.自定义右键菜单")
//
return false
//
//}
//dom2 evt.preventDefault()
//dom2 ie evt.returnValue = false
document.addEventListener("contextmenu",function(evt){
console.log("右键单击.自定义右键菜单")
// return false
evt.preventDefault()
})

自定义菜单笔记

document.addEventListener("contextmenu",function(evt)
evt.preventDefault()
list.style.display = "block"
var × = evt.clientX
var y = evt.clientY
if(x >= document.documentElement.clientWidth-list.
offsetWidth)
x = document.documentElement.clientWidth-list.offsetWidth
list.style.left =x + "px"
list.style.top = y + "px"
})

事件委托

在这里插入图片描述
获取属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值