2012-06-20 12 views
15

rowspansを使用してHTMLテーブルを正規化することができるかどうか、またどのように正規化する方法はありますか?または、それを行うことができるJavaScriptライブラリがある場合。rowspanを使用してHTMLテーブルを正規化する

例えば、この表:

+-----------+---------+ 
| Apple  | Red  | 
| Apple  | Green | 
| Apple  | Yellow | 
| Sun  | Yellow | 
| Sun  | Hot  | 
| Charizard | Hot  | 
| Charizard | Pokémon | 
+-----------+---------+ 

は、このになって次のようになります。私が何を意味するか見るために、このフィドルで

+-----------+---------+ 
| Apple  | Red  | 
|   | Green | 
|   |---------| 
|-----------| Yellow | 
| Sun  |-------- | 
|-----------| Hot  | 
|   |---------| 
| Charizard | Pokémon | 
+-----------+---------+ 

はルック:http://jsfiddle.net/scorch/LZKkQ/

は、これらの組み合わせのいくつかは簡単です手動で把握することもできますが、かなり複雑なものもあります。私は可能な限りテーブルを最小限に抑え、それをさらに最小化できる他の組み合わせはないことを確認しています。つまり、好ましくはテーブル内の一意の値のみである。

EDIT:フィドルの余分な列は気にしないでください。 FireFoxには右端の列の行スパンにいくつかの問題があると思われますので、目的の効果を得るためにもう1つ追加する必要がありました。

EDIT 2

下記のDataTableのプラグインfnMultiRowspanfnFakeRowspanは本当に望ましい結果を得ることはありません。どちらのプラグインも、あらかじめ適切な方法でテーブルをソートする必要があります。 fnFakeRowspanのみ(ホットと黄色が第2列に重複している)のカラム上で動作し、fnMultiRowspanは、以下の結果を与える:

+-----------+---------+ 
|   | Red  | 
| Apple  | Green | 
|   | Yellow | 
|-----------+---------| 
| Charizard | Hot  | 
|   | Pokémon | 
|-----------+---------| 
| Sun  | Yellow | 
|   | Hot  | 
+-----------+---------+ 
+4

ように終わるしたいと思いを試してみましたか? –

+1

はい、この機能を持っていたjqueryライブラリ[Datatable](http://datatables.net)があります:[同じ内容の行に2つ以上のセルを視覚的にグループ化する](http://datatables.net/plug-ins/api#fnFakeRowspan) –

+0

私はそれを行うための数学的方法を見つけようとしましたが、私はそこから方程式を作る方法を見つけることができないようです。 – Oscar

答えて

1

@MahmoudGamalコメントで上述したように、プラグインはjQueryのために存在することDataTablesと呼ば有用かもしれない。 、

は、同一内容の行に2つの以上のセルが存在する列のROWSPAN細胞を作成効果的に視覚的にそれらを一緒にグループ化:fnFakeRowspan機能をチェックしてください。注 - このプラグインは現在、サーバー側の処理でのみ正しく動作します。

クイックコードの読み取りに基づいて、列を指定した後、重複を探し、必要に応じてセルを結合するように見えます。 (注:私はこのコードを自分で試したことはありません)

+0

うん、それは中ほどになる。私はそれを試してみました、それは複数の列ではなく、1つの列に対してのみ行うことをサポートしていました。また、テーブルが正しく動作するためには、あらかじめテーブルを正確に並べ替える必要があります。フォーラムにはプラグインのバリエーションがいくつかありましたが、実際には何もしませんでした。とにかく、ありがとう、それを見て、私がそれを私がいくつかの修正を加えてほしいものをするために得ることができるかどうか見るかもしれない。 – Oscar

+0

いいえ、複数の列をサポートします。 'fnFakeRowspan()'をもう一度呼び出さなければなりません。 –

0

JavaScriptを十分理解すれば、自分で書くことは簡単でしょう。次の文字列が現在の文字列と同じであるかどうかを確認し、それを2回印刷する代わりに1つの文字列の高さを増やすだけです。

編集:あなたはそれを自分で書くので、あなたはそれが

+-----------+---------+ 
| Apple  | Red  | 
| Pokémon | Green | 
| Sun  | Yellow | 
| Charizard | Hot  | 
+-----------+---------+ 
+0

まあ、それはまた、最初にソートされている。それは2番目の列も行をスパンする必要があるので、それは(上記の例の表のように)それを配置する最適な方法ではないかもしれないので、 'column1 asc、column2 asc'だけではありません。最初のソート後に行を移動させることにより、より最適な配置を行うことができます。 – Oscar

+0

私の答えをチェックしてください –

+0

本当にありません。質問の "This is turned into this:"テーブルをチェックしてください。 – Oscar

関連する問題