我想知道是否有人遇到过这个以及他们做了什么来修复它。 IE,没有为我在运行时添加的类(jQuery)应用样式。奇怪的是,开发人员工具正在显示应该应用它。见下图。
“fa-bars”元素的父级为“blue”类。在这种情况下,我在$(document).ready()中添加了“blue”类。如果我在HTML标记上添加“蓝色”类(而不是在运行时执行),它会正确应用样式。但这不是我想要做的。
我在IE上只有这个问题(我使用IE8),但Chrome和FF都按照我的预期(正确)呈现页面。关于如何解决这个问题的任何想法?
仅在渲染伪内容时才会出现问题(例如,FontAwesome)。如果我用纯文本替换元素,它就可以工作。
增加:
这是我的完整HTML,其中包含指向FontAwesome和jQuery的CDN的链接:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width" />
<title>Test</title>
<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<script src="http://code.jquery.com/jquery-1.10.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$('.nav-toc').addClass('blue');
});
</script>
<style type="text/css">
.fa {font-size: 1.5em;}
.nav-toc {color: red;}
.blue {color: blue;}
</style>
</head>
<body class="pson-green">
<div id="master-body">
<!-- Top banner (Menu) -->
<div id="master-header">
<div class="content-wrapper">
<div id="nav-grp-toc" class="nav-container">
<div class="nav-btn nav-toc" title="Contents Menu"><i class="fa fa-bars"></i></div>
</div><div id="nav-grp-help" class="nav-container">
<div class="nav-btn nav-help" title="Help"><i class="fa fa-question"></i></div>
</div><div id="nav-grp-counters" class="nav-container">
<div id="page-counter" class="nav-page counter-panel">
<div id="current-page" class="current-count" title="Current page number"></div>
<div id="total-pages" class="max-count" title="Total number of pages"></div>
</div>
<div id="question-counter" class="nav-quiz counter-panel">
<div id="current-question" class="current-count" class="Current question number"></div>
<div id="total-questions" class="max-count" title="Total number of questions"></div>
</div>
</div><div id="nav-grp-steppers" class="nav-container">
<div class="nav-btn nav-page nav-prev" title="Back"><i class="fa fa-chevron-left"></i></div>
<div class="nav-btn nav-page nav-next" title="Next"><i class="fa fa-chevron-right"></i></div>
</div><div id="nav-grp-exit" class="nav-container">
<div class="nav-btn nav-page nav-exit" title="Exit Course"><i class="fa fa-sign-out"></i></div>
</div>
</div>
<div id="dimmer-for-header" class="dimmer"></div>
</div>
</div>
</body>
</html>
答案 0 :(得分:0)
我想我可能找到了答案。从我搜索类似帖子看来,问题在于IE处理伪元素。不幸的是,除了SO item之外,我对这些帖子的答案/建议似乎并不适用。基本上,它建议强制IE重绘伪元素,方法是在DOM中临时添加一个样式标记,删除所有伪内容,然后立即删除该样式标记。它似乎可行,当与基于此SO item的IE8检查结合使用时。我把它添加到我的脚本中:
var ie = (function () {
var undef,
v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i');
while (
div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
all[0]
);
return v > 4 ? v : undef;
} ());
function redrawPseudos() {
var head = document.getElementsByTagName('head')[0],
style = document.createElement('style');
style.type = 'text/css';
style.styleSheet.cssText = ':before,:after{content:none !important;}';
head.appendChild(style);
setTimeout(function () {
head.removeChild(style);
}, 0);
}
因此,当我必须添加/删除一个类,我希望它会影响伪元素的样式时,我必须这样做:
$('.class1').addClass('newclass');
if (ie === 8) {
redrawPseudos();
}
这可能是一种昂贵的做法。但我只有不到十几个伪元素。
<强>增加:强>
您可以通过将选择器传递给redrawPseudos()并将其包含在样式中来改善这一点。这会将重绘限制为选择器标识的元素。
function redrawPseudos(sel) {
...
style.styleSheet.cssText = sel + ':before, ' + sel + ':after, ' + sel + ' *:before, ' + sel + ' *:after ' + '{content:none !important;}';
...
}