0

次のような CSS セレクターがいくつかあります。

table.SearchCustomerResults > thead > tr > th[sortOrder="0"] {}
table.SearchCustomerResults > thead > tr > th[sortOrder="1"] {}

次に、JavaScript で各セルに sortOrder 拡張属性を設定します。ただし、カーソルを少し移動するまで、変更されたスタイルはブラウザー (IE7、おそらくその他) に表示されません。スタイルの再評価を強制するにはどうすればよいですか?

編集:最初に述べたようにIE6を使用しませんでしたが、IE7. しかし、疑問はまだ残っています。

4

3 に答える 3

2

再レンダリングを強制するには、さまざまなハック的な方法があります。script.aculo.usにはforceRerendering(当然のことながら) 次のようなメソッドがあります。

someElement.appendChild(document.createTextNode(' '));
someElement.removeChild(someElement.lastChild);

この場合もうまくいくはずです。

于 2009-04-20T15:35:07.270 に答える
1

同様の問題がありました。新しい div IE を挿入した後、マージンが適用されませんでした。
次のコードが役に立ちました:
  setTimeout(function () { newDiv.addClass('tratata').removeClass('tratata'); }, 0); //jquery 構文

于 2012-06-13T08:29:14.540 に答える
1

IE6 は属性または子セレクターをサポートしていないため、これはまったく機能しません。ie7-jsを使用していますか?


わかりました。これは IE のバグのようです ( divand titlefor thandを使用しsortOrderても同じ問題があります)。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <style>
      th[sortOrder="0"] {color:red}
      th[sortOrder="1"] {color:blue}
    </style>
    <script>
      function changeSortOrder() {
        // swap the orders so that blue is actually red and vice versa
        document.getElementById("hdr0").setAttribute("sortOrder","1");
        document.getElementById("hdr1").setAttribute("sortOrder","0");
        //document.getElementById("hdr0").innerHTML += "";
        //document.getElementById("hdr1").innerHTML += "";
      }
    </script>
  </head>
  <body onload="changeSortOrder()">
    <table class="SearchCustomerResults">
      <thead><tr>
        <th sortOrder="0" id="hdr0">red</th>
        <th sortOrder="1" id="hdr1">blue</th>
      </tr></thead>
    </table>
  </body>
</html>

変更する行innerHTMLはバグを回避しているようです。ただし、Googleで参照が見つかりません。

于 2009-04-20T10:43:14.790 に答える