如何填充隐藏的元素
how to shim elem.hidden properly
简介
elem.hidden
是一个新的属性,它允许隐藏元素并检测它们是否被隐藏。
浏览器支持不太好,所以我想填充它。如果我要填充这个属性,在通过elem.style
设置CSS属性时,应该填充到什么位置。
Shim的天真实施
Object.defineProperty(HTMLElement.prototype, "hidden", {
get: function get() {
return this.style.<???>;
},
set: function set(v) {
this.style.<???> = v ? <???> : <???>
},
configurable: true
});
问题
- 它应该将
elem.style.display
设置为"none"
还是<original value>
- 它应该将
elem.style.visibility
设置为"hidden"
还是"visible"
浏览器需要将隐藏属性实现为[hidden] { display:none }
请参阅Boris Zbarsky对强制浏览器忽略HTML5功能的回答,以及随后的评论。
请注意,这是通过用户代理样式表完成的,因此它的特定性非常低,并且很容易被更特定的样式覆盖,即使是那些没有提到隐藏属性的样式。
尽管我认为这是一种实现隐藏属性的可怕方法,但这些都是规则。最接近这种行为的方法是将[hidden] { display:none }
尽可能靠近HTML页面上第一个样式表的开头,而不是直接应用于元素的style属性,因为在那里它将具有非常高的特异性。
在元素属性方面,HTML5规范说"隐藏的IDL属性必须反映相同名称的内容属性。",所以这是你唯一应该通过Object.defineProperty添加的内容。然而,kennebec关于Object.defindProperty没有得到更广泛支持的评论可能是有效的。
visibility: hidden
元素仍然需要渲染,因为它们在屏幕上占据空间,所以display: none
与.hidden = true
更接近,因为display: none
元素在渲染方面可以也将被忽略。
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- JavaScript-在手机上不工作的情况下,在外部单击时隐藏元素
- 随时隐藏元素
- 根据特定条件使用ng显示/ng隐藏来显示/隐藏元素
- 隐藏元素直到加载完成(ng斗篷不是我需要的)
- 在具有类的元素中隐藏元素
- javascript()onclick隐藏元素-dos'我不在firefox工作
- JQueryHide()在按钮中使用元素时不会隐藏元素
- 使用Javascript取消隐藏元素
- 如果鼠标离开父对象,则隐藏元素
- 如何在jquery ajax成功html响应中找到输入隐藏元素
- 基于事件在循环中隐藏元素
- 渐进式增强-不使用CSS隐藏元素
- 隐藏元素后更新滚动条
- jQuery没有隐藏元素
- jQuery隐藏元素在使用CSS显示时保持隐藏状态
- 如何使用javascript在区域外单击时隐藏元素
- 如何在加载网页时隐藏元素
- JS:隐藏元素上的事件侦听器
- HTML 显示/隐藏元素 JS 不起作用