当前位置: 首页 > news >正文

原生js中nextSibling和nextElementSibling的坑

作者:拓海老师,公众号:拓海老师

一直以来js的随性让初学者蛋疼菊紧,但是真正玩熟了之后,还是非常有意思的!

今天拓海老师跟大家说一下原生js中获取元素的下一个直接兄弟元素的坑!
业务场景:点击当前元素,让其下一个紧挨着的兄弟元素展现出来,类似自定义下拉菜单。如下,点击div,让ul展现出来,此时就要用到一个dom操作nextSibling获取下一个元素。

<!doctype html>
<html><head><meta charset="UTF-8"><title>测试</title></head><body><div onclick="show(this)">列表名</div>	<ul style="display:none;"><li>内容1</li><li>内容2</li><li>内容3</li></ul><script>function show(el){var e = el.nextSibling;console.log(e); //#text}</script></body>
</html>

但是,这里打印的结果不是 ul,而是#text,也就是文本,额没zing… 哪里来的文本?
让我来解释一波,因为整个html文档可以看做是一个dom节点树,(对于dom不理解的,私我微信tcpz0802),整个页面中节点包含了:标签,文本,空白字符[回车,换行等],而在divul之间恰好敲了回车,此时调用元素的nextSibling获得的就是它。

找到了问题所在,如何解决呢?正确方式,使用nextElementSibling即可,他获取的就是Element,可以忽略文本。代码如下:

<!doctype html>
<html><head><meta charset="UTF-8"><title></title></head><body><div onclick="show(this)">列表名</div>	<ul style="display:none;"><li>内容1</li><li>内容2</li><li>内容3</li></ul><script>function show(el){var e = el.nextElementSibling;e.style.display = e.style.display=="none"?"block":"none";}</script></body>
</html>

这样一个自定义下拉菜单就完成了!!!

http://www.xdnf.cn/news/833257.html

相关文章:

  • 如何执行VMware P2V迁移|VMware Converter和替代方案
  • CppCon 2014 学习:Rolling Your Own Circuit Simulator
  • 工作中使用到的单词(软件开发)_第二版
  • 弱口令(Weak Password)总结和爆破工具
  • arm9芯片包括哪些?arm9如何应用
  • pascal编程语言介绍
  • 软件项目开发全套文档(规格说明书;详细设计;测试计划;验收报告)
  • 【飞桨AI实战】基于PP-OCR和ErnieBot的智能视频问答
  • DCT变换、DCT反变换、分块DCT变换
  • Labview2023安装教程(非常详细)从零基础入门到精通,看完这一篇就够了_labview安装教程(5)
  • 搭建大型分布式服务(二十七)如何通过Coding流水线CI/CD将SpringBoot服务部署到TKE容器集群
  • 如何获取搜索引擎的来源,以及搜索引擎的相关信息
  • 几个开源的运维管理系统介绍
  • 虚拟机安装Linux Mint 21.3及其常用软件(2024.7)
  • H.264格式分析
  • (1分钟速览)g2o入门指南--笔记版
  • 【安全漏洞】朝鲜InkySquid APT组织是怎么利用浏览器漏洞感染受害者
  • JDBC连接数据库的七个步骤(超详细)
  • CoInitialize错误引起的错误症状整理
  • 安卓的ContentResolver简介
  • 计算机的基本组成及其工作原理
  • Centos搭建socks5代理服务器
  • 【C++】TinyXML读取xml文件用法详解
  • 服务器中R及Rstudio-server的安装等
  • 0.96寸OLED显示屏模块
  • Python爬虫工程师是干什么的?能赚多少钱?需要掌握哪些技术?
  • 百度网盘linux版本怎么安装
  • Activity
  • 获取时间的几种方法
  • 软件详细设计说明书编制模板(直接套用模板2024Word原件)