上下文:我有一个使用HTML5 数据属性的 HTML 页面。我的一些 CSS 样式使用属性选择器来根据这些自定义属性的值设置元素的样式。
问题:当我使用 JavaScript 更新 data- 属性的值时,Chrome 会通过重新设置受影响元素的样式来正确响应,但 IE8(我需要支持)不会...不会立即响应。class
让 IE8 更新样式的唯一方法是通过其他方式(例如删除或修改属性)直接摆弄 CSS 样式。
例子:
<html>
<head>
<style type="text/css">
.Test[data-foo="bar"]{ background-color: Green; }
.Test[data-foo="baz"]{ background-color: Red; }
</style>
<script src="scripts/jquery-1.8.3.js" type="text/javascript"></script>
<script type="text/javascript">
function change(div) { $(div).attr("data-foo", "baz"); }
function toggleTest() { $("DIV").toggleClass("Test"); }
</script>
</head>
<body>
<div data-foo="bar" onclick="change(this);" class="Test">Testing</div>
<div data-foo="bar" onclick="change(this);" class="Test">Testing</div>
<input type="button" onclick="toggleTest()" value="Toggle Class" />
</body>
</html>
在 Chrome 中,您可以单击 Test1 和 Test2 栏,它们会立即变为红色。在 IE8 中,您必须单击该栏,然后单击该按钮两次(一次删除类,再次恢复它)。
问题:解决方法是什么?显然我已经确定了一个(添加/删除类),但它很难看。有没有一种优雅、不显眼的方式来强制 IE8 重新评估元素的样式,而不用乱搞元素的属性?