javascript - 不要使用JS加载在dom中显示为none的div
问题描述
我有 2 个 div,其中一个用于 Internet Explorer,另一个用于其余浏览器。用于 IE 的一个隐藏display:none
用于其他浏览器,并使用 Internet Explorer 的媒体查询显示。目前一切正常。但这似乎不是理想的解决方案,因为display:none
div 确实出现在 DOM 中,这对性能不利。如何仅初始化可见的元素,或者如何不使用具有display:none
<div style="display:none"id="explorer">Internet explorer</div>
<div id="rest">Chrome,Firefox,etc</div>
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
#explorer{
display: block !important;
}
#rest{
display: none;
}
}
因此,如果您在 Chrome 中加载它,<div style="display:none"id="explorer">Internet explorer</div>
将不会显示在视图中,但您将能够通过开发工具看到它。我希望这根本不使用 JS 为 chrome、firefox 等进行初始化,也不<div id="rest">Chrome,Firefox,etc</div>
为 IE 初始化。
解决方案
不幸的是,如果您以正常方式将其写入 HTML 文档,则在涉及 CSS 或 JS 之前会发生一些事情。因此,您不需要在文档中包含 div 并使用 JS 插入其中一个或另一个。
if (isInternetExplorer) {
var ieContent = document.createElement(‘div’)
...
document.body.appendChild(ieContent)
} else {
var modernContent = document.createElement(‘div’)
...
document.body.appendChild(modernContent)
}
如何将您的页面内容放入 JS 是令人讨厌的部分。让所有内容都保留在 .html 文件中的一种方法是:
<script type='text/html' id='ieContent'>
<div>hello internet explorer</div>
</script>
ieContent.innerHTML = document.getElementById('ieContent').innerText
如果可能,最好让您的服务器检测 IE 并重定向到一个完全不同的 .html 文件;那么您有 2 个简单明了且分隔良好的文件,并且没有魔法。甚至在此之前,我会质疑您的隐形 div 的影响以及通过使事情变得比这更复杂来获得什么。
推荐阅读
- javascript - 如何将 php 登录代码转换为 java 脚本?
- javascript - 如何使用正则表达式替换“href”属性中的特定 URL?
- r - 解释 proc.time() 输出
- html - 小屏幕上的响应式 Flexbox
- r - 在 bash 脚本中运行多个 R 脚本
- java - 为什么'unique = true'在休眠实体中不起作用?
- r - 如何使计数图中的所有行都从对照组开始
- python - 在 Pandas 中展平包含 JSON 数组的列
- sql-server - 对日期使用 ID 进行挑选 - lastWeekEnd 和 lastMonthEnd 是同一日期时的问题
- java - How to implement builder inside my already defined class