1querySelector()和querySelectorAll()

querySelector()方法接受css选择符参数,返回匹配该模式的第一个后代元素,如果没有匹配项则返回null

querySelectorALL() 返回匹配该模式的所有匹配的节点

<body><ul><li>1</li><li>2</li><li>3</li></ul><script>const li1=document.querySelector('li')console.log(li1);const li=document.querySelectorAll('li')console.log(li);</script>
</body>

querySelector获得<li>1<li>

而querySelector获得的是一个伪数组

通过遍历可以拿到里面的数据或者触发元素

 for(let i=0;i<li.length;i++){console.log(li[i].innerHTML); //1  2  3li[i].addEventListener('click',function(){console.log(111);})}

通过遍历给多个元素注册点击事件。

2事件委托

同时给多个元素注册事件,除了上述的for循环注册事件,还可以使用事件委托。

事件委托是利用事件流的特征解决一些开发需求的知识技巧

优点:减少注册次数,可以提高程序性能,原理:事件冒泡  给父元素注册事件,当我们触发资源的时候,会冒泡到父元素身上,从而触发父元素的事件。

事件对象e.target.tagName可以获得真正触发事件的元素。

<body><ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>
<script>
const ul =document.querySelector('ul')
// 事件委托给父亲
// console.dir(e.target) //就是我们需要点击的那个对象 里面有个'LI‘ 来进行判断
//找到真正被触发的事件元素 e.target.tagNameul.addEventListener('click',function(e){console.dir(e.target) //就是需要点击的对象if(e.target.tagName ==='LI'){e.target.style.color='red'}
})// 事件对象 e.target.tagName才能获取真正被触发的事件元素
</script>

3节点操作

3.1父节点查找

parentNode属性,返回最近一级的父节点 找不到返回null

子元素.parentNode
<body><div class="yeye"><div class="father"><div class="son"></div></div></div><script>const son = document.querySelector('.son')console.log(son.parentNode);   </script>
</body>

查找子节点

childNodes 获得所有子节点,包括文本节点(空格,换行),注释节点等

children属性 仅获得所有元素节点,返回的还是一个伪数组

父元素.childNodes
父元素.children
 <ul><li>1</li><li>2</li><li>3</li><li>4</li></ul><!-- childNodes 获得全部的子节点,回车换行,注释 空白 --><script>const ul = document.querySelector('ul')const arr = ul.childNodesconsole.log(arr);

<body><ul><li>1</li><li>2</li><li>3</li><li>4</li></ul><script>// children 只获得元素类型的节点,返回一个伪数组,获得的节点是亲儿子,既往下第一层的节点const ul =document.querySelector('ul')const arr= ul.childrenconsole.log(arr);</script>
</body>

兄弟关系查找

下一个兄弟节点、
nextElementSibling属性
上一个兄弟节点
previousElementSibling属性
<body><ul><li>213</li><li class="box">3244444444</li><li>345555555555</li><li>66666666666666</li></ul><script>const ul=document.querySelector('ul')// console.log( ul.children[2].previousSibling)console.log( ul.children[2].previousElementSibling)  //3244444444console.log(ul.children[2].nextElementSibling)   //66666666666666</script>
</body>

3.2增加节点(创建和追加的综合)

第一步是创建节点,第二步是追加节点

创建节点,
document.createElement('标签名')
追加节点
插入到父元素的最后一个子元素
//插入到这个父元素的最后
父元素.appendChild(要插入的元素)
//插入到父元素中某个子元素的前面
父元素.insertBefore(要插入的元素,在哪个元素前面)
<body><ul><li>节点</li></ul>
<div class="btn">增加节点</div><script>
const btn = document.querySelector('.btn')btn.addEventListener('click',function(){
//创建节点const li=document.createElement('li')const ul=document.querySelector('ul')
//增加节点ul.appendChild(li)li.innerHTML='我是创建出来的'li.style.color='green'
})</script>
</body>

3.3其他节点操作总结

/ 节点的添加
// node.appendChild() 将一个节点添加到指定父节点的节点列表末尾
// node.appendChild(child)// node.insertBefore() 将一个节点添加到父节点指定子节点前面
// node.insertBefore(child,指定元素)
// // 将一个节点添加到父节点的子节点最前面
// node.insertBefore(child,node.children[0])// // 节点的删除
// node.removChild() 删除一个子节点,返回删除的节点// // 节点的克隆
// node.cloneNode() 返回调用该方法的节点的一个副本,也称为克隆节点
//   如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的子节点
//   如果括号参数为空或false,则是浅拷贝,只克隆复制节点本身,不克隆里面的子节点
</head>
<div class="box"><div class="box1"><p>123</p> </div>
</div>
<button>克隆</button>
<body><script>const box1 =document.querySelector('.box1')const box =document.querySelector('.box')const button=document.querySelector('button')button.addEventListener('click',function(){// 默认为false,只克隆元素本身const son1 =box1.cloneNode()console.log(son1);console.log('--------------');// 为true的时候,表示除了元素本身被克隆,子孙后代也被克隆const son2 =box1.cloneNode(true)console.log(son2)
// 追加节点box.appendChild(son2)console.log(box);})</script>
</body>
<body><ul><li>1</li><li>2</li><li>3</li></ul><button>按钮</button>
<script>
const btn = document.querySelector('button')
const ul=document.querySelector('ul')
btn.addEventListener('click',function(){// 删除console.log(ul.children);ul.removeChild(ul.children[0])console.log(ul.children);console.log(ul);
})
</script>

4自定义属性

如果标签有自定义属性

通过  let i = +e.target.dataset.id可以拿到对应的标签。

<body><div class="tab"><div class="tab-nav"><h3>每日特价</h3><ul><li><a class="active" href="javascript:;"data-id='0'>精选</a></li><li><a href="javascript:;"data-id='1'>美食</a></li><li><a href="javascript:;"data-id='2'>百货</a></li><li><a href="javascript:;"data-id='3'>个护</a></li><li><a href="javascript:;"data-id='4'>预告</a></li></ul></div><div class="tab-content"><div class="item active"><img src="./images/tab00.png" alt="" /></div><div class="item"><img src="./images/tab01.png" alt="" /></div><div class="item"><img src="./images/tab02.png" alt="" /></div><div class="item"><img src="./images/tab03.png" alt="" /></div><div class="item"><img src="./images/tab04.png" alt="" /></div></div></div><script>//事件委托 原理就是事件委托//采取事件委托的形式来做tab选项卡切换//1 获取ul itemconst item = document.querySelector('item')const ul = document.querySelector('ul')//2 添加点击事件ul.addEventListener('click', function (e) {console.log(e)console.log(e.target)console.log(e.target.tagName)//3 判断是不是A标签if (e.target.tagName === 'A') {//consol.log('我选的是a标签')//4 排他思想//先移除新来的 active remove()document.querySelector('.tab-nav .active').classList.remove('active')//当前元素添加active add()e.target.classList.add('active')}//下面的大盒子 我们可以采用自定义属性 给html结构添加自定义属性console.log(e.target.dataset.id)//需要把i转换为数字类型 不然会报错const i = +e.target.dataset.id//排他思想//先移除原来的 active remove()document.querySelector('.tab-content .active').classList.remove('active')//给对应盒子加active add()document.querySelector(`.tab-content .item:nth-child(${i+1})`).classList.add('active')})</script>
</body>

18获得触发事件元素节点的方法相关推荐

  1. appium获取元素节点的方法_Appium学废系列(四) 如何写出优雅又健壮的脚本

    ‍‍正文共:3716字  预计阅读时间:10分钟 1 合理使用appium自动化等待方法 在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在 ...

  2. jq元素复制另一个元素的html,jq中复制克隆元素节点的方法

    jquery中有一个 clone() 方法,它可以复制元素以及元素的子节点,可以使用它将一个元素复制到多个地方并展示,具体的使用方法可以参考下面的文章. JQuery clone() 方法 clone ...

  3. jQuery——插入元素节点的方法

    .insertAfter()与after() 作用:将A添加到B后面 -- A.insertAfter( ' B ' ) / B.after( ' A ' ) [例]点击长条,添加到盒子中第二个长条的 ...

  4. QT的QTreeWidget节点触发事件(一)

    声明:网络上给出的这方面的资料较少,且都针对的是第一级节点的触发绑定事件,但是当遇到有不止一级父节点的子节点后,相关内容较少,因此通过实践整理出了以下方法,进行QTreeWidget节点触发事件的绑定 ...

  5. js获取元素节点的几种方法

    1.以元素名获取 //通过标签名获取元素节点(获取0到多个节点) //书写格式: //document.getElementsByTagName("元素名") let divEle ...

  6. html点击按钮清空元素,jQuery怎么删除元素节点

    jquery删除元素节点的方法非常简单,我们可以直接通过remove()方法来进行删除节点操作. 下面我们就结合简单的代码示例,给大家详细介绍jquery删除节点元素的方法. 代码实例如下: jque ...

  7. 报错:Uncaught TypeError: 获取的元素节点.setAttribute is not a function

    我们在写代码的时候可能会遇到类似的报错: Uncaught TypeError: div1.setAttribute is not a function 源代码是这样的: <!DOCTYPE h ...

  8. 原生js绑定事件的三种方法

    // 绑定事件// 行内绑定// 选择元素绑定事件// 事件监听 有三个参数('什么事件','函数','true或false')true(事件捕获) false(事件冒泡)document.query ...

  9. 获取子元素节点(children,childNodes)

    在js中获取元素节点有DOM对应的方法如getElementsByTagName()等等..对于获取子元素还有另外一种获取方法ChildNodes 不过ChidNodes在高级浏览器除(IE6-8)里 ...

  10. js关于子元素不触发父元素事件的若干方法

    2019独角兽企业重金招聘Python工程师标准>>> 方法一:event.cancelBubble=true; /* 最好用,js通用,event.cancelBubble=tru ...

最新文章

  1. 静态页面和动态页面的区别
  2. python 搭配 及目录结构
  3. 【408预推免复习】操作系统之IO层次结构和IO控制方式
  4. Eclipse 部分快捷键
  5. linux教程:通过编译安装ansible解决apt install ansible后无法安装AWX的莫名问题
  6. 中国男人何时回归家庭?(转)
  7. django避免写models.py办法
  8. android studio简易记账本,Android记账本
  9. opencv3.1.0+VS2013 环境配置
  10. IC设计EDA软件虚拟机环境配置与安装教程
  11. 347,猜数字大小 II
  12. 睡眠有助于巩固复杂问题解决技能的记忆痕迹
  13. 如何将国外的ftp气象大数据下载回来(by quqi99)
  14. GD32F4—RTC闹钟及自动唤醒中断配置详解
  15. html5写手机端页面
  16. Tinh Lo Cach Xa 人离情逝
  17. LCD液晶显示屏的特性与控制
  18. Qt 之 QVideoFrame转换为QImage
  19. Toad常用快捷键大全-Toad快捷键设置
  20. Java堆排序(大顶堆小顶堆及应用实例)

热门文章

  1. python有颜色进度条库_来看看Python炫酷的颜色输出与进度条打印
  2. Duplicate class com.xxx.xxx found in modules
  3. 解决 Word 中”用于创建此对象的程序是 Visio,您的计算机尚未安装此程序。若要编辑此对象,您必须安装可以打开此对象的程序“
  4. Java实现手机登录功能
  5. Python简介,第2章–字符串和列表
  6. Bonny校园app使用体验
  7. 上研究生学计算机去河大学校好不好,河南大学研究生,河南大学研究生值得读吗?...
  8. 简单socket聊天小程序+socket简单封装
  9. 天牛群,天牛须结合粒子群算法BAS-PSO。研究生阶段毕生所 学,低价出售!可定制pid参数整定。
  10. DINO: 让目标检测拥抱Transformer!霸榜COCO!