質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

718閲覧

JS:ランキング表で同率順位の場合にセルを結合する処理について

Gr.

総合スコア89

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/07/17 01:04

数の多い順にランキングし、tableで表示します。
数が同数(同率順位)の場合は順位のセルを結合して表示しようと思いJSでそのための処理を書いたのですが、なぜか一カ所だけうまくいきません。以下にコードを載せるので、問題と思われる箇所を教えてください。

html

1<div class="rank"> 2 <p>ランク</p> 3 <table> 4 <tr> 5 <th>順位</th> 6 <th>国名</th> 7 <th></th> 8 </tr> 9 <% @nations.each_with_index do |f,i| %> 10 <tr class="table-tr"> 11 <td class="table-rank"><%= i+1 %></td> 12 <td class="table-name"><%= link_to f.name, tag_path(f.name) %></td> 13 <td class="table-count"><%= f.count %></td> 14 </tr> 15 <% end %> 16 </table> 17</div> 18

js

1$(function() { 2 var counter = 0; 3 var text =""; 4 var target=""; 5 $($('.table-tr').get().reverse()).each(function(){ 6 if ($(this).children('.table-count').text() == text) { 7 counter++; 8 if(target !="") 9 target.remove(); 10 } 11 else { 12 if(target !="") 13 target.attr('rowSpan', counter); 14 counter=1; 15 } 16 text = $(this).children('.table-count').text(); 17 target = $(this).children('.table-rank'); 18 }); 19});

結果:
ランク

順位国名
1アメリカ20
中国20
3フランス18
4イギリス16
5オランダ15
カナダ15
7イタリア12
8オーストラリア11
インド11
10ブラジル8

「アメリカ」と「中国」は同数のため、「中国」の.table-rankはちゃんとremoveされてはいるのですが、ご覧の通りずれてしまいます。5位や8位のように上下でくっつきません(5位と8位の実際の見た目は、セルが結合され順位が上下中央にちゃんと寄ります)。
なぜ1位だけ機能しないのでしょうか?どなたか詳しい方、JSの記述で問題と思われる箇所をご指摘ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

問題と思われる箇所を教えてください。

if(target !="") target.attr('rowSpan', counter);

恐らく、これです。
数(3列目の値)が変わった時にその下の行のrowSpanを設定していますが、一番上の場合、数が変わる前にループから抜けます。
最初の要素限定の処理を書くか、やり方を変える必要があると思います。

投稿2019/07/17 02:00

moredeep

総合スコア1507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gr.

2019/07/20 00:18

moredeepさん 回答ありがとうございます。 最初の要素限定の処理を書いて対処しようと思います。 助かりました。
guest

0

まずはrowspanしたテーブルを手書きで書き
それに合うようにrubyでrowspan属性付きのtdを発生させる

投稿2019/07/17 01:29

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問