移除元素内联样式属性的最优方案咨询
嘿,这个问题问得挺细致的,我来帮你梳理下每种方案的差异和最优选择~
先回顾下你的场景:CSS里定义了.notif-icon是inline-block,但HTML里的<span id="error">通过内联style="display:none"把元素隐藏了,现在要让它显示,也就是取消这个内联display的覆盖。
先说说你提到的三种可行属性赋值方案:
document.getElementById("error").style = ""
这个操作会把整个内联style属性清空——相当于把元素上所有内联样式(比如如果以后加了color: red这类内联样式)都删掉。如果你的元素只有display:none这一个内联样式,这么做没问题,但如果后续有其他内联样式需求,这个操作会把它们一并清除,存在不必要的副作用。document.getElementById("error").style = undefined
本质上和上面的空字符串效果差不多,浏览器会把undefined自动转换成空字符串,最终也是清空整个内联style。但从语义和可读性来说,style属性本身是字符串类型,赋值undefined不符合预期,看起来也怪怪的,不推荐用这种写法。document.getElementById("error").style.display = ""
这是最精准的方案!它只针对display这个内联样式做操作:把内联的display:none清空后,元素的display会自动回退到CSS类.notif-icon定义的inline-block,而且其他内联样式(如果有的话)会完全保留。完全符合你“优先操作元素属性而非调用方法”的需求,也是副作用最小的选择,强烈推荐这个。
顺便解释下为什么你试的delete方法没用:element.style是一个CSSStyleDeclaration对象,它的属性(比如display)不是普通的JS对象属性,delete操作对这类特殊属性不起作用,所以那些写法都无效。
另外对比下你提到的attribute/方法类操作:removeAttribute("style")和style = ""效果一致,都是清空所有内联样式;style.removeProperty("display")和style.display = ""效果接近,但后者用属性赋值的方式更贴合你的偏好。
总结下来,优先选择document.getElementById("error").style.display = "",精准、安全,完全满足你的需求~
备注:内容来源于stack exchange,提问作者njlarsson

