【问题标题】:IE7 ignoring my .js css rules - CSS/Javascript issue?IE7 忽略了我的 .js css 规则 - CSS/Javascript 问题?
【发布时间】: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

  1. 更改 .js 和 .no-js 声明的顺序,因为我认为后者可能会覆盖导致问题的前者 - 不。
  2. 更改脚本和样式表的顺序,因为这可能是因为 IE7 在读取脚本之前读取了 .no-js 样式表 - 不。
  3. 更改声明的具体性 - 也许更具体会导致 IE7 读取 .js 声明 - 不。
  4. 从文档中完全删除 .no-js 类,希望 IE7 能够读取 .js 声明。 NOPE - 它只是忽略 .no-js 和 .js 声明。

简而言之,IE7 完全忽略了存在 .js 声明的事实。所以我认为可能是脚本有问题,这就是我所做的:

Javascript

  1. 我在
  2. 我试过 document.documentElement 而不是 document.getElementsByTagName('html')[0] - 还是一样。
  3. 我用过var htmlOrWhat=document.getElementsByTagName("html")[0]; alert(htmlOrWhat);,FF,Chrome,Opera,Safari,IE8,IE9返回'[object HTMLHtmlElement]',而IE7返回[object],导致我认为IE7没有正确读取元素.
  4. 然后我尝试读取 的 id 和 lang 属性来测试 IE7 是否真的正确读取了元素,是的,它正确地检索了这些属性,它只是简单地拒绝对其应用 .js css 声明。

到目前为止,我已经束手无策了(尽管我怀疑 [object] 异常与我的问题有关),我希望 * 的某个人能够帮助我。如果有人能准确地指出 IE7 有什么问题,以及如何修复它,我将不胜感激。提前致谢。

【问题讨论】:

  • 顺便说一句,在我手头的所有浏览器中,你的块都是石灰(启用了 JS)。
  • 这可能不是答案,但它是"text/javascript",而不是<script> 标签内的"text-javascript"
  • 您的文档类型也是错误的 - 它应该是 ,尽管这不会导致问题。
  • 感谢 poepje 和 John,这些都是愚蠢的打字错误,正如你所提到的,不会导致问题。:)

标签: javascript css internet-explorer-7


【解决方案1】:

setAttribute()getAttribute() 通常在 IE7 及更早版本(以及更高版本的兼容模式)中被破坏。请改用元素的 className 属性。

document.getElementsByTagName("html")[0].className = "js";

这是一个小提琴演示 - http://jsfiddle.net/ajcw/6Yz8x/1/

【讨论】:

  • 谢谢你!我没有想到它可能是 setAttribute()...因为它确实根据我的开发人员工具将 .js 类添加到了 html 元素。顺便问一下,你知道为什么 IE7 用 document.getElementsByTagName("html")[0]; 返回 [object] 吗?
  • 抱歉 YAWD,我不确定 IE7 为什么会返回这个。
【解决方案2】:

SetAttribute() 在 IE7 中无法正常工作。创建项目后,它不会在项目上设置属性。您需要另一种方法来处理 IE7 中的更改。

下面的答案建议使用 className 属性。或者你可能只使用 jQuery。

(更多:IE7 and setAttribute() to remove classes

【讨论】:

  • 感谢您确切地解释 setAttribute() 有什么问题 - 这有助于我理解为什么选择 className 而不是它。干杯。
【解决方案3】:

setAttribute() 和 getAttribute() 在 IE 7 中被破坏

检查一下: IE7 and setAttribute() to remove classes

【讨论】: