いくつかの拡張機能を備えたjQuery UI Resizableを使用することをお勧めします。プラグインはサイズ変更のみに焦点を当てており、任意のイベントで独自のコールバック関数を追加できるため、完全なカスタマイズが可能です。ただし、デフォルトでは、プラグインはテーブル ヘッダーをサイズ変更できませんが、サイズ変更時にテーブルの COLGROUP 領域を更新して、有効な HTML で実行することができました。
具体的なアイデアは次のようになります。
- HTML テーブルは、COLGROUP 領域で初期幅を指定し、CSS プロパティ table-layout:fixed を持っています。
- TH 要素を jQuery UI の .resizable() で装飾します。
- サイズ変更の開始時: アクティブな TH の一致する COL 要素を見つけ、元の幅を記憶します。
- サイズ変更時: サイズ変更デルタを計算し、選択した COL 要素を更新 (増加/減少) します。これにより、すべてのブラウザーで列全体のサイズが変更されます。
プラグインの初期化:
$(".resizable th").resizable({
handles: "e",
// set correct COL element and original size
start: function(event, ui) {
var colIndex = ui.helper.index() + 1;
colElement = table.find("colgroup > col:nth-child(" +
colIndex + ")");
// get col width (faster than .width() on IE)
colWidth = parseInt(colElement.get(0).style.width, 10);
originalSize = ui.size.width;
},
// set COL width
resize: function(event, ui) {
var resizeDelta = ui.size.width - originalSize;
var newColWidth = colWidth + resizeDelta;
colElement.width(newColWidth);
// height must be set in order to prevent IE9 to set wrong height
$(this).css("height", "auto");
}
});
http://ihofmann.wordpress.com/2012/07/31/resizable-table-columns-with-jquery-ui/で、JavaScript、HTML マークアップ、クロスブラウザー CSS、Live-Demo を含む完全なソリューションについて説明しました。