コンテキスト: HTML5 data- attributesを使用する 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 では、バーをクリックしてからボタンを 2 回クリックする必要があります (クラスを削除するには 1 回、クラスを復元するにはもう一度)。
質問:回避策は何ですか? 明らかに、私は1つを特定しました(クラスの追加/削除)が、それは醜いです。要素の属性をいじらずに、IE8 に要素のスタイルを強制的に再評価させるエレガントで目立たない方法はありますか?