JS先获取元素输出,再改变类名,为什么输出的元素是改变后的类名
javascript吧
全部回复
仅看楼主
level 1
小镇ly💫 楼主
JS先获取元素输出,再改变类名,为什么输出的元素是改变后的类名?代码如图。
console.log(a)输出的<div class="box2"></div> 类名为什么是box2?为什么没按代码书写顺序执行。
2023年03月13日 14点03分 1
level 6
你拿到的是内存地址
2023年03月14日 03点03分 4
可是用引用类型替代DOM元素,也还是按代码书写顺序运行,也没出现这种后面代码先执行的情况。
2023年03月14日 03点03分
@小镇ly💫 查阅了一下资料哈,输出指令默认读取第一层数据,当你展开的时候他会去内存中读取里层数据,这也是为什么里层的class是最新的原因,当你直接打印demo.class他就会显示旧的的class[吐舌]
2023年03月14日 07点03分
level 9
console具有延迟加载的特性,你在devtools里展开属性时,才会去读取属性。考虑输出json字符串把他固定下来
2023年03月14日 04点03分 5
把修改类名改成修改name属性就不会出现我说的那种情况,所以不是console特性的缘故。
2023年03月14日 07点03分
level 1
这是因为在 JavaScript 中,querySelector 函数返回的是一个 DOM 对象,该对象具有一个属性 className,表示该对象的 CSS 类名。因此,在代码中先获取元素,输出后再改变类名,输出的结果就是改变后的 CSS 类名。
至于为什么输出结果中类名为 box2 而不是 box1,是因为在代码中,先通过 querySelector 函数获取了一个 div 元素,然后将该元素的 className 属性设置为 box2。因此,该元素的 CSS 类名就变成了 box2。在代码中,先获取元素,再改变类名,因此输出的结果自然就是改变后的 CSS 类名。
至于为什么输出结果没有按照代码书写的顺序执行,这是因为在浏览器中,JavaScript 代码是按照异步执行的方式执行的。也就是说,当代码执行到 console.log(a) 时,可能 a.className的值还没有被改变。因此,输出结果中的类名是改变后的类名,而不是原来的类名
2023年03月14日 20点03分 6
level 1
咋说呢?console。log是异步执行的 在输出的时候 class已经变了
所以不存在什么便顺序执行的事!
2023年03月20日 11点03分 7
1