IE10 のテーブルビューに問題があります。何らかの理由で、IE10 は画面に描画される前にセルの幅を測定しようとしますが、他のブラウザーは測定しません。IE10 と別のバージョン/ブラウザーにブレークポイントを配置すると、違いがはっきりとわかります。
コードはかなり複雑ですが、問題を再現するスニペットを作成できました。
var cells = 40;
var rows = 1000;
console.clear();
function measure(obj) {
obj = $(obj);
console.log(obj.getWidth());
}
var randomNumber = function (scale, offset) {
scale = scale || 10;
offset = offset || 50;
return (Math.floor(Math.random() * 11) * scale) + offset;
};
var output = "<table><thead><tr>";
for (var i = 0; i < cells; i++) {
output += "<th width='" + randomNumber() + "'></th>";
}
output += "</tr></thead><tbody>";
for (var j = 0; j < rows; j++) {
output += "<tr>";
for (var i = 0; i < cells; i++) {
output += "<td></td>";
}
output += "</tr>";
}
output += "</tbody></table>";
// Insert into DOM.
$(document).body.insert(output);
// Measure the elements.
$$('th').each(measure);
フィドル
列と行の量に応じて、IE10 は正しい幅を返すか、より複雑な場合はすべてに対して 0 を返します (数値を調整してこれをテストできます)。
0 を返している間、ループで getWidth 関数を遅らせようとしましたが、ブラウザをロックして最終的に 0 を返すだけです。IE10に正しい幅を返す方法はありますか?