次のような単純なhtmlテーブルがあります。
これを次のように変更したいと思います。
仕事をするための簡単なプラグインを書きました:
(function ($) {
var settings;
$.fn.splitTable = function (options) {
var $this = this;
//options
settings = $.extend({}, defaults, options);
$this.filter("table").each(function () {
//body
var table = $(this);
var $tds = table.find('tbody td');
var k, l;
for (k = 0, l = Math.ceil($tds.length / settings.columns); l < $tds.length; k++, l++)
$($tds[k]).parent().append($tds[l]);
//header
var $ths = table.find('thead th');
for (var i = 0; i < settings.columns - 1; i++) {
$ths.each(function () {
table.find('tr:first').append(this.outerHTML);
});
}
});
return $this;
};
var defaults = {
columns: 2
};
})(jQuery);
jsFiddle のサンプルは次のとおりです: http://jsfiddle.net/Misiu/Tsqvj/
これはほぼ期待どおりに機能しますが、jshint はヘッダーのクローンを作成する場所でエラーを表示します。
ループ内で関数を作成しないでください。
2つ目はスピードです。小さなテーブルでは問題なく動作しますが、大きなテーブル (rows>2k) や古いブラウザーでは、ブラウザーがしばらくフリーズします。
コードレビューで質問できることはわかっていますが、コードが期待どおりに機能していません。それが機能する場合は、改善を試みてから、コードレビューで質問します。