真不要依赖dom结构

被上了一课,一个好好的功能突然有一天就不行了。原因只是因为安装了一个浏览器插件。一个浏览器插件是如何能影响我项目的功能的呢

说起来功能也很简单,就是密码输入框旁边的的图标,用来控制显示或者隐藏密码内容。原本是没问题的,但是chrome安装了一个LastPass的插件,这个功能就失效了,这就离了个大普。那下面就看看这到底怎么回事

下面就看一下示例代码

html 复制代码
<div>
  <i class="icon-user"></i>
  <input tpye="password" />
  <i class="icon-eye"></i>
</div>

<script>
// 点击眼睛图标的回调函数
function changeVisible(event) {
  var target = event.target;
  if (文本状态) {
    // 切换为密码状态
    target.previousElementSibling.type = 'password'
  } else {
    // 切换为文本状态
    target.previousElementSibling.type = 'text'
  }
}
</script>

原本工作正常,奈何有一天有人安装了插件 LastPass ,这个插件具体什么功能没研究,只是发现这个插件会在密码框后面插入一个图标。插件运行之后,原本的dom变成了下面这样

html 复制代码
<div>
  <i class="icon-user"></i>
  <input tpye="password" />
  <i class="last-pass-icon"></i>
  <i class="icon-eye"></i>
</div>

下面的问题就明白了。由于插件改变了原来的dom结构,导致原代码中使用的 previousElementSibling 获取到的就不再是原来的input了。这就导致了原来的功能失效


问题不大,简单记录一下。每次都有不同的坑。但凡有可能,就不要使用这类dom结构相关的api, 查找获取元素尽量使用class,id之类的。

相关推荐
swipe5 小时前
从 0 到 1 实现大文件上传:分片、秒传、断点续传、暂停、重试与服务端合并
前端·javascript·面试
kyriewen7 小时前
AI 生成的代码能跑就行?这 5 个坑迟早炸
前端·javascript·ai编程
kisshyshy7 小时前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
胡志辉7 小时前
从v8源码和react深入浅出理解 JavaScript 作用域链与闭包
前端·javascript
Bolt8 小时前
TypeScript 7.0 来了:当 tsc 用 Go 重写之后
javascript·typescript·go
阳火锅10 小时前
😭测试小姐姐终于不骂我了!这个提BUG神器太香了...
前端·javascript·面试
林希_Rachel_傻希希12 小时前
js里面的proxy理解。以及vue3响应式数据设计底层
前端·javascript·面试
阿黎梨梨12 小时前
AI Loop:告别“人肉写提示词”,让代码替你“鞭策”AI
javascript·人工智能
竹林81815 小时前
用 wagmi v2 + viem 监听链上事件,我踩了三天坑终于搞懂了实时日志与历史补全
javascript
只一16 小时前
😭从回调地狱到 async/await:一文打通 Ajax 与 JS 异步编程
javascript