为什么用 querySelector 选不到动态添加的 CSS 类元素?
我在页面加载后通过 JS 给某个 div 动态加了一个 class,但之后用 document.querySelector('.new-class') 却返回 null,明明元素上已经有这个类了,这是为啥?
相关的样式代码如下:
.new-class {
background-color: yellow;
padding: 10px;
}
.initial {
border: 1px solid #ccc;
}
我是在点击按钮后才给元素加上 .new-class 的,查询也是在那之后执行的,顺序应该没问题啊……
你得确认是不是有多个相同类名的元素存在,而且第一个匹配的并不是你想找的那个。建议用 document.querySelectorAll('.new-class') 来获取所有匹配的元素,然后看看返回的结果是什么样的。
另外一个小坑就是,动态添加 class 的操作和查询操作虽然看起来是按顺序执行,但有时候在复杂的事件处理逻辑里可能会出现意外。保险起见,在查询前加个小小的延迟:
这个100毫秒的延迟一般够用了,如果还不行就再调大点。不过说实话,这种前端小问题要是出现在我后端代码里,早被测试同事喷死了。干我们这行的,数据库层面的问题才更让人头疼呢。