【发布时间】:2012-06-26 08:05:42
【问题描述】:
我在 元素上使用 .js 和 .no-js 类来区分具有 Javascript 和没有 Javascript 的布局。
使用 元素,我添加了一个默认类“no-js”。然后我在标题中包含一行脚本,document.getElementsByTagName("html")[0].setAttribute("class","js"); 以将 html 类切换为“js”。显然这行代码只适用于启用了 js 的浏览器,因此 元素将变为 而未启用 js 的浏览器将继续读取 。
然后我将简单地使用.js someElement{ font-weight:bold;} 与.no-js someElement{ font-weight:normal;} 来设置不同的页面样式。
但是,我发现这种方法在 IE7 上非常失败。在 IE7 上,该脚本有效——至少看起来如此。在开发者工具上,它显示 。但是,IE7 会忽略所有以 .js 开头的 css 样式,并且 IE7 的行为就像 元素具有 .no-js 类一样。 (查看http://bit.ly/LMre3N 以获得更清晰的图片。)
我无法开始想象这里到底出了什么问题:这是 IE7 在呈现 CSS 时行为错误的情况,还是脚本无法正常工作的情况?这是我尝试过的:
CSS
- 更改 .js 和 .no-js 声明的顺序,因为我认为后者可能会覆盖导致问题的前者 - 不。
- 更改脚本和样式表的顺序,因为这可能是因为 IE7 在读取脚本之前读取了 .no-js 样式表 - 不。
- 更改声明的具体性 - 也许更具体会导致 IE7 读取 .js 声明 - 不。
- 从文档中完全删除 .no-js 类,希望 IE7 能够读取 .js 声明。 NOPE - 它只是忽略 .no-js 和 .js 声明。
简而言之,IE7 完全忽略了存在 .js 声明的事实。所以我认为可能是脚本有问题,这就是我所做的:
Javascript
- 我在
- 我试过
document.documentElement而不是document.getElementsByTagName('html')[0]- 还是一样。 - 我用过
var htmlOrWhat=document.getElementsByTagName("html")[0]; alert(htmlOrWhat);,FF,Chrome,Opera,Safari,IE8,IE9返回'[object HTMLHtmlElement]',而IE7返回[object],导致我认为IE7没有正确读取元素. - 然后我尝试读取 的 id 和 lang 属性来测试 IE7 是否真的正确读取了元素,是的,它正确地检索了这些属性,它只是简单地拒绝对其应用 .js css 声明。
到目前为止,我已经束手无策了(尽管我怀疑 [object] 异常与我的问题有关),我希望 * 的某个人能够帮助我。如果有人能准确地指出 IE7 有什么问题,以及如何修复它,我将不胜感激。提前致谢。
【问题讨论】:
-
顺便说一句,在我手头的所有浏览器中,你的块都是石灰(启用了 JS)。
-
这可能不是答案,但它是
"text/javascript",而不是<script>标签内的"text-javascript"。 -
您的文档类型也是错误的 - 它应该是 ,尽管这不会导致问题。
-
感谢 poepje 和 John,这些都是愚蠢的打字错误,正如你所提到的,不会导致问题。:)
标签: javascript css internet-explorer-7