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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

352閲覧

2列複数要素を動的にソート、高さも揃える

axxxx

総合スコア18

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/01/18 05:10

2列横並びで多数の要素をリスト化します。
(左右2列×複数行 )

その要素は動的にソートを行うのですが(金額・名前・優先順位)

ソート後、横並び二つの要素の高さを揃えたいです。

ページを読み込み直す事なく。

table・table-cellの使用を考えております。

table-cellを使用すると要素が全て一列横に並んでしまうのですが、
ソート後にtable-rowをもつ要素で2つずつ囲う方法が分からず
困っています。

Flexboxを使用すると下記のような形でソートできるのですが、
table・table-cellを用いても同様なソートは可能でしょうか。

・ソート
・ソート後要素二つ毎に高さを揃える
・要素2つ事に文言が入るのでul liは使用できない

こちらでアドバイスをいただけますと幸いです。
どうぞ、宜しくお願い致します。

IE8まで対応・jqueryは 1.12.4 を使用予定です。

サンプルソースは下記です。

<div class="list_outer"> <div class="product"> <div class="name">E</div> <div class="price">1,000</div> <div class="txt2">test test test test test test test test test test test test test test test test test test test test </div> </div> <div class="product"> <div class="name">F</div> <div class="price">2,000</div> </div> <div class="product"> <div class="name">G</div> <div class="price">500</div> </div> <div class="product"> <div class="name">H</div> <div class="price">1,500</div> </div> <div class="product"> <div class="name">I</div> <div class="price">3,000</div> </div> <div class="product"> <div class="name">JK</div> <div class="price">50</div> </div> <div class="product"> <div class="name">J</div> <div class="price">4,000</div> </div> <div class="product"> <div class="name">L</div> <div class="price">2,500</div> <div class="txt2">test </div> </div> <div class="product"> <div class="name">A</div> <div class="price">1,000</div> <div class="txt2">test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test test </div> </div> <div class="product"> <div class="name">AB</div> <div class="price">2,000</div> </div> <div class="product"> <div class="name">C</div> <div class="price">500</div> <div class="txt2">test test test test test test test test test test test test test test test </div> </div> <div class="product"> <div class="name">D</div> <div class="price">1,500</div> </div> </div>

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

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

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

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

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

himakuma

2018/01/18 05:13

要素のソート処理は初期表示時のタグに、文字を入れ直している感じですか?
axxxx

2018/01/18 05:17

まだどのように行うかは未定ですが、文字を入れ直すのではなく、要素ごとソートできればと思っております。
sousuke

2018/01/18 05:26

2列横並びというのは.productが2列ということですか?理想形みたいな画像をつけたほうがいいかと。
axxxx

2018/01/18 05:29 編集

そうなります。
sousuke

2018/01/18 06:32

なぜ高さをそろえる必要があるのですか?borderなどの見た目の問題ですか?
guest

回答2

0

ベストアンサー

CSS

1.list_outer { 2 display: table; 3} 4 5.list_outer .row { 6 display: table-row; 7} 8 9.list_outer .product { 10 display: table-cell; 11} 12 13.list_outer, 14.list_outer .product { 15 border: 1px solid #333; 16}

とりあえず金額だけ……

JavaScript

1$(function() { 2 // for IE8. 3 var sortTable = function(getValue) { 4 var i, len; 5 var container = $('.list_outer'); 6 var templateRow = $('<div class="row"></div>'); 7 var fragment = document.createDocumentFragment(); 8 var products = container[0].querySelectorAll('.product'); 9 var array = []; 10 11 for (i = 0, len = products.length; i < len; i++) { 12 array[i] = { product: products[i], value: getValue(products[i]) }; 13 } 14 15 array.sort(function(a, b) { return a.value - b.value; }); 16 for (i = 0, len = array.length; i < len; i++) { 17 fragment.appendChild(array[i].product); 18 } 19 20 container.empty(); 21 var sorted = fragment.querySelectorAll('.product'); 22 for (i = 0, len = sorted.length; i < len; i += 2) { 23 var tr = templateRow.clone(false); 24 tr.append(sorted[i], sorted[i + 1]); 25 container.append(tr); 26 } 27 }; 28 29 var sortPrice = function() { 30 sortTable(function(product) { 31 return parseFloat(product.querySelector('.price').innerHTML.replace(/,/g, '')); 32 }); 33 }; 34 35 sortPrice(); 36 $(document).on('click', '#sortPrice', sortPrice); 37});

投稿2018/01/18 06:40

x_x

総合スコア13749

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

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

axxxx

2018/01/18 07:11

ご教示ありがとうございます。 参考にさせていただきます。
guest

0

見た目だけの話ならinline-blockと:beforeでどうにかできますが。
https://jsfiddle.net/sousuke/8ztbe1et/
高さをそろえる理由がわからないのでなんとも。

投稿2018/01/18 06:46

sousuke

総合スコア3828

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問